面向对象super 练习

  1. 看代码写结果【如果有错误,则标注错误即可,并且假设程序报错可以继续执行】

    class Foo(object):
        a1 = 1
        
        def __init__(self,num):
            self.num = num
        def show_data(self):
            print(self.num+self.a1)
        
    obj1 = Foo(666)
    obj2 = Foo(999)
    print(obj1.num)
    print(obj1.a1)
    
    obj1.num = 18
    obj1.a1 = 99
    
    print(obj1.num)
    print(obj1.a1)
    
    print(obj2.a1)
    print(obj2.num)
    print(obj2.num)
    print(Foo.a1)
    print(obj1.a1)
    
    结果:
    666
    1
    18
    99
    1
    999
    999
    1
    99
    
  2. 看代码写结果,注意返回值。

    class Foo(object):
        
        def f1(self):
            return 999
        
        def f2(self):
            v = self.f1()
            print('f2')
            return v
        
        def f3(self):
            print('f3')
            return self.f2()
        
        def run(self):
            result = self.f3()
            print(result)
    
    obj = Foo()
    v1 = obj.run()
    print(v1)
    
    
    结果
    f3
    f2
    999
    None
    
    
  3. 看代码写结果

    class Foo(object):
        def __init__(self, num):
            self.num = num
            
    v1 = [Foo for i in range(10)]
    v2 = [Foo(5) for i in range(10)]
    v3 = [Foo(i) for i in range(10)]
    
    print(v1)
    print(v2)
    print(v3)
    
    结果
    [<class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>, <class '__main__.Foo'>]
    [<__main__.Foo object at 0x000002A1D906D908>, <__main__.Foo object at 0x000002A1D906D898>, <__main__.Foo object at 0x000002A1D906D860>, <__main__.Foo object at 0x000002A1D906D828>, <__main__.Foo object at 0x000002A1D906D7B8>, <__main__.Foo object at 0x000002A1D906DDD8>, <__main__.Foo object at 0x000002A1D906DE10>, <__main__.Foo object at 0x000002A1D906DE48>, <__main__.Foo object at 0x000002A1D906DE80>, <__main__.Foo object at 0x000002A1D906DEB8>]
    [<__main__.Foo object at 0x000002A1D906DEF0>, <__main__.Foo object at 0x000002A1D906DF28>, <__main__.Foo object at 0x000002A1D906DF60>, <__main__.Foo object at 0x000002A1D906DF98>, <__main__.Foo object at 0x000002A1D906DFD0>, <__main__.Foo object at 0x000002A1D9073048>, <__main__.Foo object at 0x000002A1D9073080>, <__main__.Foo object at 0x000002A1D90730B8>, <__main__.Foo object at 0x000002A1D90730F0>, <__main__.Foo object at 0x000002A1D9073128>]
    
    
  4. 看代码写结果

    class StarkConfig(object):
    
        def __init__(self, num):
            self.num = num
    
        def changelist(self, request):
            print(self.num, request)
    
    
    config_obj_list = [StarkConfig(1), StarkConfig(2), StarkConfig(3)]
    for item in config_obj_list:
        print(item.num)
    
    结果
    1
    2
    3
    
    
  5. 看代码写结果:

    class StarkConfig(object):
    
        def __init__(self, num):
            self.num = num
    
        def changelist(self, request):
            print(self.num, request)
    
    
    config_obj_list = [StarkConfig(1), StarkConfig(2), StarkConfig(3)]
    for item in config_obj_list:
        item.changelist(666)
        
        
    1 666
    2 666
    3 666
    
  6. 看代码写结果:

    class Department(object):
        def __init__(self,title):
            self.title = title
    
    class Person(object):
        def __init__(self,name,age,depart):
            self.name = name
            self.age = age 
            self.depart = depart
            
            
    d1 = Department('人事部')
    d2 = Department('销售部')
    
    p1 = Person('武沛齐',18,d1)
    p2 = Person('alex',18,d1)
    p3 = Person('安安',19,d2)
    
    print(p1.name)
    print(p2.age)
    print(p3.depart)
    print(p3.depart.title)
    
    结果:
    武沛齐
    18
    <__main__.Department object at 0x000001EA92C7DD68>
    销售部
    
  7. 看代码写结果:

    class Department(object):
        def __init__(self,title):
            self.title = title
    
    class Person(object):
        def __init__(self,name,age,depart):
            self.name = name
            self.age = age 
            self.depart = depart
    	
        def message(self):
            msg = "我是%s,年龄%s,属于%s" %(self.name,self.age,self.depart.title)
            print(msg)
        
        
    d1 = Department('人事部')
    d2 = Department('销售部')
    
    p1 = Person('武沛齐',18,d1)
    p2 = Person('alex',18,d1)
    p1.message()
    p2.message()
    
    结果:
    我是武沛齐,年龄18,属于人事部
    我是alex,年龄18,属于人事部
    
  8. 看代码写结果:

    class A:
        def f1(self):
            print('in A f1')
    
    class B(A):
        def f1(self):
            print('in B f1')
    
    class C(A):
        def f1(self):
            print('in C f1')
    
    class D(B, C):
        def f1(self):
            super(B, self).f1()
            print('in D f1')
    
    obj = D()
    obj.f1()
    
    结果:
    in C f1
    in D f1
    
  9. 看代码写结果:

    class A:
        def f1(self):
            print('in A f1')
    
    class B(A):
        def f1(self):
            super().f1()
            print('in B f1')
    
    class C(A):
        def f1(self):
            print('in C f1')
    
    class D(B, C):
        def f1(self):
            super().f1()
            print('in D f1')
    
    obj = D()
    obj.f1()
    
    结果:
    in C f1
    in B f1
    in D f1
    
  10. 程序设计题:

    运用类完成一个扑克牌类(无大小王)的小游戏:
    用户需要输入用户名,以下为用户可选选项:
        1. 洗牌
        2. 随机抽取一张
        3. 指定抽取一张
        4. 从小到大排序
        5. 退出
    
    1. 洗牌:每次执行的结果顺序随机。
    2. 随机抽取一张:显示结果为:太白金星您随机抽取的牌为:黑桃K
    3. 指定抽取一张:
        用户输入序号(1~52)
        比如输入5,显示结果为:太白金星您抽取的第5张牌为:黑桃A
    4. 将此牌从小到大显示出来。A -> 2 -> 3 .......-> K
    
    提供思路:
        52张牌可以放置一个容器中。
        用户名,以及盛放牌的容器可以封装到对象属性中。
        
    
    
    import random
    class Poker:
        lst = ["A"]+[str(i) for i in range(2,11)]+["J","Q","K"]
    
        def __init__(self,name,poker_list):
            self.name = name
            self.poker_list = poker_list
            self.scrap_card = []
    
        def shuffle_cards(self):
            """
            洗牌
            :return:
            """
            self.poker_list += self.scrap_card
            random.shuffle(self.poker_list)
            print(self.poker_list)
    
        def random_extraction(self):
            """
            随机抽取一张牌
            :return:
            """
            x = random.choice(self.poker_list)
            print(f"{self.name}您随机抽取的牌为:{x}")
            self.scrap_card.append(x)
            self.poker_list.remove(x)
    
        def  appoint(self,num):
            """
            指定一张牌
            :param num:第几张牌
            :return:
            """
            x = self.poker_list[num - 1]
            print(f"{self.name}您抽取的第{num}张牌为:{x}")
            self.scrap_card.append(x)
            self.poker_list.remove(x)
        def Sort(self):
            self.poker_list.sort(key=lambda x:self.lst.index(x[2:]))
            print(self.poker_list)
    
    
    lst1 = ["黑桃","红桃","方片","梅花"]
    lst2 = [ str(i) for i in range(2,11)]+["A","J","Q","K"]
    
    poker_list = [ i +j for i in lst1 for j in lst2]
    
    name = input("请输入姓名")
    masge = """
        1. 洗牌
        2. 随机抽取一张
        3. 指定抽取一张
        4. 从小到大排序
        5. 退出
    """
    poker = Poker(name,poker_list)
    dic = {"1":poker.shuffle_cards,"2" :poker.random_extraction,"3":poker.appoint,"4":poker.Sort,"5":exit}
    while True:
        ch = input(masge + "\n>>>")
        if ch in dic and ch !="3":
            dic[ch]()
        elif ch == "3":
            num = input(f"请输入一序号1~{len(poker.poker_list)}")
            if num.isdecimal() and 0 < int(num) < len(poker.poker_list):
                dic[ch](int(num))
            else:
                print("输入的序号有误!")
        else:
            print("请输入正确的选项!")
    
原文地址:https://www.cnblogs.com/ciquankun/p/11317215.html