小言_互联网的博客

Python 面向对象

402人阅读  评论(0)

一、类的定义:

语法格式:

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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场