拾遗:
组合:
就是几个类堆放起来的意思。
例子:
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))
组合出现在:
class Pool:
def __ init__(self,x,y):
self.turtle=Turtle(x)
self.fish=Fish(y)
后面调用要用self.跟上用self初始化的那段即可。
为什么呢:
这种设计模式称为委托,
把一个类对象委托给另一个类,让另一个类完成被委托类的操作
这里要清楚地分辨
类,类对象,实例对象,
差别自行百度。
另外,有一点需要注意的是:
对象的属性会覆盖类中方法
因此,不要再类里定义所能想到的所有的特性和方法,
应该用继承和组合机制来拓展。
魔术方法
总被双下划线包围的东西。
魔术方法是面对对象的python的一切!
魔术方法的魔力体现再它们总能再适当的时候被自动调用。
经典魔术方法例子:
__init__
有关__ init__的初级版介绍:https://blog.csdn.net/qq_43504939/article/details/90815211
注意点:
记得有self参数,
叫其他名字也ok,别打些奇怪的就可以了
不要再__init__中返回参数,就是不能用return
__init__只是一个构造(初始化)函数,返回个吉尔。
看视频的时候,还听说:
init不是实例化被调用的第一个方法,
还有一个比它厉害的,
只是用起来没那么广泛,
__new__
这个一开始理解不了,因为没有学习其他面向对象语言的经验,
后来懂了一点点:
这主要是当你继承一些不可变的class如:int str tuple,提供
给你一个自定义类的实例化过程的途径,
也就是你DIY一个咯
例子:
class c(str)
def __new__(cls,string) /*这里cls跟self差不多*/
string=string.upper()
return str.__new__(cls,string)
输出:
a=c(“i want to sleep”)
a
I WANT TO SLEEP
这里是什么意思呢?
为什么return给自己了呢
先来解释一下__init__和__new__的差别:
__init__是类实例创建之后被调用,
而__new__方法正是创建这个类实例的方法。
__new__是创建对象时调用,会返回当前对象的一个实例。
而init则是创建对象的调用,对对象的一个实例初始化,
也就是说,
这个return 实质是为对象创建了一个类实例!