在python中 定义类的时候,若是添加__init__方法,那么在创建类的实例的时候,实例会自动调用这个方法,一般用来对实例的属性进行初使化。(更通俗的说就是你创建该类该类附加的功能 比如说你家狗狗刚出生,就会去找麻麻喝奶~)当我们的实例对象有明确的初始化步骤的时候你可以在__init__中部署初始化代码
# 我们定义一个矩形类,需要长和宽两个参数,拥有计算周长和面积两个方法。
# 我们需要对象在初始化的时候拥有“长”和“宽”两个参数,因此我们需要重写__init__方法
# 因为我们说过,__init__方法是类在实例化成对象的时候首先会调用的一个方法,大家可以理解吗?
class Rectangle:
def __init__(self, x, y):
self.x = x
self.y = y
def getPeri(self):
return (self.x + self.y) * 2
def getArea(self):
return self.x * self.y
>>> rect = Rectangle(3, 4)
>>> rect.getPeri()
14
>>> rect.getArea()
12
注:__init__方法返回 一定为none所以说 在__init__方法中 return 会报错
在类的内部,访问自己的属性和方法,都需要通过self,self就是外部对象在类内部的表示,此时可以使用p调用该方法
那
self
呢?self不需要传参,self,表示对象本身,
谁调用,就表示谁
,此时的self就表示你Rectangle
(3,4)
创造出来的那个对象,也即是
rect
。也即,我们创造出了rect,然后给rect的属性赋了值,此时rect就表示拥有属性值之后的那个矩形。
二、__new__方法
python new方法是python一个对象实例化时所调用的第一个方法(不是__init__哦)而且它的参数不是self 而是一个类(cls)
>>> class GreStr(str):#将随便输入的字符串全部转化为大写输出
def __new__(cls,string):
string = string.upper()
return str.__new__(cls,string)
>>> a = GreStr('asdasdasd')
>>> a
'ASDASDASD'
>>>
这里大家估计会不明白为什么会return str.__new__(cls,string) 因为GreStr 继承的str类 是python 类 本身无法改变 (不能直接改变str类里的方法)所以 当你创建GreStr 实例对象的时候 先调用__new__方法 自动将你传入的字符 转化成大写 然后因为系统里 本身是由str类的 只需要调用
str.__new__(cls,string)将刚刚改变的string 传入str类中的new方法即可