Python3 aprendizaje orientado a objetos

@ Orientado a objetos
Empiece a escribir blogs, empiece a tomar notas

Uno, la creación de la clase.

1, la definición de la clase

class People:
	country = 'China' 		#类变量
	def __init__(self,name,sex,age,height ):#构造函数
		self.name = name	#实例变量(从C++角度,类似于数据成员)
		self.sex = sex
		self.age = age
		self.__height = height #私有属性
	
	def printInfo(self):		#方法(从C++角度,类似于成员函数)
		print("%s is a %s,from %s"%(self.name,self.sex,self.country))

	def __myPrivacy(self):#私有方法
		print("This is my privacy!")

2, yo

El parámetro self apunta al objeto en sí mismo y representa una instancia de la clase. Es indispensable. Puede nombrar este parámetro de manera informal. Normalmente es self.

3. Variables de clase

Las variables de clase son compartidas por todas las instancias, acceden directamente al nombre de clase disponible Variables de clase.
Variable de instancia, exclusiva de esta instancia.

Acceso variable de clase

Al acceder a una variable de clase, primero acceda a la variable de instancia. Si la variable de instancia no existe, acceda a la variable de clase. Si la variable de instancia existe, las variables a las que se accede mediante el método 1 y el método 2 siguientes son todas variables de instancia.
Método 1: El método de acceso de la variable de clase en la clase es self.country;
Método 2: El método de acceso fuera de la clase es p1.country;
Método 3: El método de acceso directo es People.country.

#若country的实例变量不存在
p1 = People("Zhangsan","girl",22,160)
p1.printInfo()
print("from:",p1.country)
print("country:",People.country)
Zhangsan is a girl,from China
from: China
country: China
#若实例变量存在
class People:
	country = 'China'   #类变量
	 def __init__(self,name,sex,age):#构造函数
		  self.name = name #实例变量
		  self.sex = sex
		  self.age = age
		  self.country = 'Ch'
		 
	 def printInfo(self):  #方法
 		print('%s is a %s,from %s'%(self.name,self.sex,self.country))

p1 = People("Zhangsan","girl",22)
p1.printInfo()
print("from:",p1.country)
print("country:",People.country)
Zhangsan is a girl,from Ch
from: Ch
country: China

Modificación de variables de clase

Al modificar una variable de clase, puede usar People.country para asignar directamente un valor. Cuando una instancia modifica una variable de clase, p1.country = 'A', lo que significa que la variable de instancia se agrega en este espacio de instancia sin modificar el valor de la variable de clase. Si la instancia necesita modificar la variable de clase, p1.__class__.country = 'A'.

En segundo lugar, la herencia de la clase.

class A0:
	def __init__(self):
		print("init A0")
	
	def printName(self):
		print("class name:A0")

class A1:
	def __init__(self):
		print("init A1")
		
	def printName(self):
 		print("class name:A1")

		
class B(A0):    #单继承
	def __init__(self):
		super().__init__()
		print("init B")
		
	#def printName(self):
		#print("class name:B")

class C(A0,A1):    #多重继承
	def __init__(self):
		A0.__init__(self)
		A1.__init__(self)
		print("init C")

	def printName(self):
 		 print("class name:C")

Herencia múltiple

1. El constructor __init __ ()

El constructor se usa para la inicialización de la instancia En herencia, el constructor de la subclase debe llamar al constructor de su padre para asegurar la inicialización básica. Hay dos métodos:
1. La herencia única se puede llamar de la siguiente manera, el siguiente toma el constructor de la clase B como ejemplo.
super () .__ init __ () (super (B, self) .__ init __ () en la clase anterior)
A0 .__ init __ (self) (llamando al constructor de superclase no relacionado)
2. En herencia múltiple, se llama a lo siguiente, tomando la clase C como ejemplo.
super (C, self) .__ init __ ()
super (A0, self) .__ init __ ()

A0 .__ init __ (self)
A1 .__ init __ (self)
Si necesita inicializar los parámetros de la clase padre, todos están en el init de la clase padre llamada.

执行
c = C()
结果
init A0
init A1
init C

2. Llamada al método

Si varias clases principales implementan el mismo método de diferentes maneras, y la subclase no implementa este método y no especifica el método de la clase principal, entonces de izquierda a derecha busque si la clase principal contiene un método y el método de la clase anterior es Anula el método de la clase subyacente.

#运行
c = C()
c.printName()
b = B()
b.printName()

#结果
init A0
init A1
init C
class name:C
init A0
init B
class name:A0

3. Algunos otros métodos

1. Para determinar si una clase es una subclase de otra clase, puede utilizar el método integrado issubclass.

issubclass(childrenClass,basesClass),返回True或者False。

2. Para acceder a la clase base de una clase, puede acceder a su atributo especial __bases__.

childrenClass.__bases__

3. Para determinar si un objeto es una instancia de una clase específica, puede usar isinstance.

p = People()
isinstance(p,People)
返回True或者False

También puede usar isinstance (a, int) para ver el tipo de datos.
4. Obtenga la clase a la que pertenece el objeto, el atributo disponible __class__.

p.__class__。

Supongo que te gusta

Origin blog.csdn.net/Lhhxxdhr/article/details/106551065
Recomendado
Clasificación