【Python学习日记】B站小甲鱼:组合,绑定和常见的IBF

组合

定义一个水池,包含🐟和🐢。

class Turtle():
    def __init__(self,x):
        self.num = x

class Fish():
    def __init__(self, x):
        self.num = x

class Pool():
    def __init__(self,x,y):
        self.turtle = Turtle(x)
        self.fish = Fish(y)
    def print_num(self):
        print("水池里有%d只乌龟,%d条鱼" %(self.turtle.num,self.fish.num))

pool = Pool(10,1)
pool.print_num()

结果就输出

水池里有10只乌龟,1条鱼

所以可以发现组合,就是把类和实例化放到一个新类里面,就会生成一个组合的类了。

组合可以把几个不是太相关的类放在一起。如果是相关的类可以使用继承。


class C:
    count = 0

a = C()
b = C()
print(a.count)
print(b.count)

print("*")

b.count+=10
print(a.count)
print(b.count)

print("*")

C.count +=100
print(a.count)
print(b.count)
print(C.count)

输出结果是

0
0
*
0
10
*
100
10
100

当b.count()+=10的时候相当于生成了一个count()方法覆盖了基类的方法,所以b.count()的值改变了

如果属性和方法的名字相同,那么属性会把方法覆盖掉。因此,要多使用组合和继承扩展类的属性,尽量减少在一个类中定义过多的属性。

 

绑定

Python要求有实例,方法才能调用。这种限制就是Python的绑定。

有self就不用管了。


 

一些相关的IBF

issubclass(class,classinfo)    如果后一个类是前一个类的父类,则返回true。但这种检查是非严格的检查,一个类被认为是自身的子类。classinfo可以是类对象的元组,只要class与其中任何一个候选类的子类,则返回True

isinstance(object,classinfo)    检查实例object是否属于类classinfo

 

hasattr(object,name)    检查一个对象是否有对应的属性,变量名需要用 ‘ ’  以字符串的方式表示

getattr(object,name)    是否有指定的属性值,如果有就返回属性值,否则报告attribute Erorr错误

setattr(object,name,value)    同上,如果不存在属性值,把value的值赋予它

delattr(object,name)    删除类中的属性,如果属性不存在就抛出异常

 

property(fget,fset,fdel)    设置一个属性。参数分别是获得属性的方法,得到属性值的方法和删除属性的方法

 

posted @ 2020-09-11 20:56  JodyJoy  阅读(143)  评论(0编辑  收藏  举报