一、类的定义:
语法格式:
class A:
a = 10
一般地,类名的首字母以大写形式命名,属性引用的方法:obj.name。
二、类的构造:即(c++类的构造函数)
语法格式:
def __init__(self):
self.t = []
当类实例化一个对象时,则会自动调用_init_函数进行对象的初始化,该构造函数还可以带有参数,使用情况与c++构造函数基本一致,且无法返回任何值。
三、类中的self:
类中的函数与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称self。
它的意义是:代表当前对象的地址,且self不是python中的关键字,self.class 指向类,self就像c++中的this指针。
简单记住,每个在类中的函数第一个参数记得写上self即可。
四、类中的私有公有:
私有属性:在变量名或函数名前,加上两底横线,__,即可。
公有属性:所有不加__的都默认为公有属性
例子:
class A:
__a = 10 #__a为私有属性,类外无法调用它
b = 12 #b为公有属性,类外可以调用它
五、类的继承:
python中的类也支持继承,派生类的定义格式:
class A:
a = [1,2,3,4]
class B(A): #创建新类B 继承于类A
b = 10
print(A.a) # [1,2,3,4]
print(B.a) # [1,2,3,4]
在python类的继承中,若子类写了与父类同名函数,则会默认将子类的方法覆盖掉父类的方法。
所以,在子类中写构造函数的时候,记得在子类构造函数中实现父类的构造。
class A:
def __init__ (self):
self.x = 10
self.y = 15
class B(A): #创建新类B 继承于类A
def __init__(self):
A.__init__(self) #调用父类的构造函数
#可以使用super函数,则不需要给定基类名字,格式:super().__init__()
self.b = 5
self.a = 10
a1 = A()
b1 = B()
print(a1.x) # 10
print(b1.x) # 10
python支持类的多重继承,只需要在括号加上多个所要继承的类即可:
class C:
c = [1,3,4]
class A:
a = [1,2,3,4]
class B(A,C): #创建新类B 继承于类A和类C
b = 10
a1 = A()
c1 = C()
b1 = B()
print(a1.a) # [1,2,3,4]
print(c1.c) # [1,2,3,4]
print(b1.c) # [1,3,4]
六、面向对象常用内置函数:
1.issubclass(class, classinfo) :左参数为需要判断的类,右参数为所判断的类是否所属的父类,右边可以为元组形式。
2.isinstance(object, classinfo):检查实例对象是否属于一个类,object为一个实例对象,calssinfo为判断是否所属的类,右边可以为元组形式。
3.hasattr(object, attribute):判断attribute属性是否在object实例对象中。
4.getattr(object,name[,default]):返回属性,若无则默认返回default。
5.setattr(object, name, value):可以为对象的某一个属性赋值,object代表对象,name代表属性名,value为值,若对象中没有该属性,则自动生成赋值为value的名字为name的属性。
6.delattr(object, name):在对象object中删除名字为name的属性。
7.property(fget = none, fset = none, fdel = none):可以通过属性设置属性。例子:
class A:
def __init__(self,size):
sefl.size = size
def getsize(self):
return self.size
def setsize(self,value):
self.size = value
def delsize(self):
del self.size
x = property(getsize, setsize, delsize)
a = A()
a.x = 5 #相当于调用了setsize
a.x #相当于调用了getsize
del a.x #相当于调用了delsize
print(a.x) #无法打印
七、析构函数:
语法格式:
class A:
def __init__ (self):
print("我是构造函数")
def __del__(self):
print("我是析构函数")
作用:销毁对象
注意:若有多个对象的引用,则需要将所有引用del后,它才会调用。
七、类中的专有方法:
1.__init__
构造函数,上面已讲过。
2.__new__
在init初始化类实例化对象之前,实际上类中还自动调用了类对象的new方法创建一个实例化对象,一般地object类有一个__new__方法,该方法接收一个参数(一般为类对象),将该参数进行实例化并返回一个对象, 平时需要我们自定义new方法的情况很少,但若你继承一些不可变的类时,可以自定义new方法实现改变。
例子:
class Change(int):
def __new__(cls, value):
return super(Change, cls).__new__(cls, abs(value))
i = Change(-3)
print i
3.运算符重载:
以下全部记得函数名左右有两杠下划线:
(1)add(self,other):重新定义加法+。
(2)sub(self,other):重新定义减法-。
(3)mul(self,other):重新定义乘法。
(4)truediv(self,other):重新定义真除法/。
(5)floordiv(self,other):重新定义整数除法//。
(6)pow(self,other):重新定义pow()的调用或幂计算。
(7)lshift(self,other):重新定义<<。
(8)rshift(self,other):重新定义>>。
(9)and(self,other):重新定义按位与:&
(10)xor(self,other):重新定义按位异或:^
(11)or(self,other):重新定义按位或:|
使用方法:与c++中的运算符重载用法类似。
还有个中增量运算符重载,具体自行百度或谷歌。
转载:https://blog.csdn.net/uGamemaster/article/details/104715822