面向对象三 组合 特殊成员

一.组合

class Foo(object):
    def __init__(self,age):
        self.age = age
    def display(self):
        print(self.age)
data_list = [Foo(8),Foo(9)]
for item in data_list:
    print(item.age,item.display())
#结果:8   8  None   9   9   None
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print("666")
config_obj_list = [StarkConfig(1),StarkConfig(2),RoleConfig(3)]
for item in config_obj_list:
    print(item.num)
实例
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
class RoleConfig(StarkConfig):
    pass
config_obj_list=[StarkConfig(1),StarkConfig(2),RoleConfig(3)]
for item in config_obj_list:
    item.changelist(168)
#结果:1 168 2 168 3 168
实例
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print(666,self.num)
config_obj_list=[StarkConfig(1),StarkConfig(2),RoleConfig(3)]
for item in config_obj_list:
    item.changelist(168)
#结果: 1 168  2 168  666 3
实例
实例
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
    def run(self):
        self.changelist(999)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print(666,self.num)
class AdminSite(object):
    def __init__(self):
        self._registry = {}
    def register(self,k,v):
        self._registry[k] = v
site = AdminSite()
print(len(site._registry))
site.register("range",666)
site.register("shilei",438)
print(len(site._registry))
#结果: 0  2
在字典中的
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
    def run(self):
        self.changelist(999)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print(666,self.num)
class AdminSite(object):
    def __init__(self):
        self._registry = {}
    def register(self,k,v):
        self._registry[k] = v
site = AdminSite()
# print(len(site._registry))
# site.register("range",666)
# site.register("shilei",438)
# print(len(site._registry))
site.register("lyd",StarkConfig(19))
site.register("yjl",StarkConfig(20))
site.register("fgz",RoleConfig(33))
print(len(site._registry))
for k,row in site._registry.items():
    row.changelist(5)
#结果:  19 5  20 5  666 33
面向对象在字典的应用
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
    def run(self):
        self.changelist(999)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print(666,self.num)
class AdminSite(object):
    def __init__(self):
        self._registry = {}
    def register(self,k,v):
        self._registry[k] = v
site = AdminSite()
site.register("lyd",StarkConfig(19))
site.register("yjl",StarkConfig(20))
site.register("fgz",RoleConfig(33))
print(len(site._registry))
for k,row in site._registry.items():
    row.run()
#结果: 19 999  20 999  666 33
实例
class Userlnfo(object):
    pass
class Department(object):
    pass
class StarkConfig(object):
    def __init__(self,num):
        self.num = num
    def changelist(self,request):
        print(self.num,request)
    def run(self):
        self.changelist(999)
class RoleConfig(StarkConfig):
    def changelist(self,request):
        print(666,self.num)
class AdminSite(object):
    def __init__(self):
        self._registry = {}
    def register(self,k,v):
        self._registry[k] = v(k)
site = AdminSite()
site.register(Userlnfo,StarkConfig)
site.register(Department,StarkConfig)
print(len(site._registry))
for k,row in site._registry.items():
    row.run()
#结果:  Userlnfo类 999
#      Department类 999
实例

总结:

  1.对象中封装了什么

  2.self 到底是谁

二.主动调用其它类的成员

  方式一:

class Base:
    def f1(self):
        print("5个功能")
class Foo:
    def f1(self):
        print("3个功能")
        Base.f1(self)
obj = Foo()
obj.f1()

总结:

  Base.实例方法(自己传self)

  与继承无关

  方式二:按照类的继承顺序,找下一个

class Foo:
    def f1(self):
        super().f1()
        print("3个功能")
class Bar:
    def f1(self):
        print("5个功能")
class lnfo(Foo,Bar):
    pass
obj = lnfo()
obj.f1()
class Foo:
    def f1(self):
        print("5个功能")
class Bar(Foo):
    def f1(self):
        super().f1()
        print("3个功能")
obj = Bar()
obj.f1()
View Code

三.特殊成员

猜你喜欢

转载自www.cnblogs.com/chenxi67/p/9555772.html