python 类和魔术方法0x00学习笔记 190605

拾遗:
组合
就是几个类堆放起来的意思。

例子:

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 实质是为对象创建了一个类实例!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值