1.类声明
class 类名:
#类体
2.类名
类名是第一次跟类定义绑定的类名。
class C:
pass
print(C.__name__) # C
类声明是 type
类的实例,类名就是存储这个实例的变量,因此在赋值后可以通过重新赋值更改其值。
class C:
def f(self):
return 1
print(C().f()) # 1
C = 2
print(C().f()) # 报错
print(C) # 2
3.类引用表达式
类名
4.类定义作为值
4.1作为值赋给变量
class C:
def f(self):
return 1
print(C().f()) # 1
B = C
print(B().f()) # 1
4.2作为函数的实参或返回值
#作为实参
def call_some_class(some_class):
return some_class().f()
class C:
def f(self):
return 1
print(call_some_class(C)) # 1
#作为返回值
def return_some_class():
class C:
def f(self):
return 1
return C
C2 = return_some_class()
print(C2().f()) # 1
5.访问成员
类名.类变量名
类名.类方法名()
类名.静态方法名()
对象名.实例变量名
对象名.实例访问器属性名
对象名.实例方法名()
类名().实例变量名
类名().实例访问器属性名
类名().实例方法名()
6.访问器属性(Accessor Property)
注意:Python 语言不支持类访问器属性。
注意:getter
的定义代码必须在 setter
的定义代码前面,否则会报错。
class ClassWithGetSet:
#实例getter
@property
def instance_method(self):
#访问器属性体
#实例setter
@instance_method.setter
def instance_method(self, 形参):
#访问器属性体
7.构造函数
一个类非必须有构造函数。如果一个类没有构造函数,相当于定义了一个函数体为空的构造函数。如果一个类有多个构造函数,后定义的构造函数会覆盖先定义的构造函数。
class 类名:
def __init__(self):
#构造函数体
8.继承
一个子类可以直接继承自多个父类,但如果多个父类存在同名成员时,左边的父类的同名成员的优先级高于右边的父类的同名成员。
子类会直接继承父类中可继承的成员,间接继承祖父类中可继承的成员,以此类推,直至没有可继承的成员。
继承支持类变量、类方法、静态方法、实例变量、实例访问器属性、实例方法、构造函数。
注意:从父类中继承过来的成员无需在子类中重新声明,否则会发生覆盖。
class 子类名(父类名1, 父类名2, 父类名N):
#子类体
9.覆盖(Override)
如果从父类中继承过来的成员在子类中重新声明,此时相当于在子类中同时声明了两个相同名称的成员,则在子类中重新声明的成员会覆盖从父类中继承过来的成员。
注意:只需要成员名称相同,就会发生覆盖。
注意:关于支持覆盖的成员,参考继承章节。
注意:覆盖并不会影响父类中原来的成员。
class A:
def f(self):
return 1
class B(A):
def f(self):
return 2
print(B().f()) # 2
10.抽象类
Python 语言不支持抽象类。
11.创建对象
#无实参
对象名 = 类名()
#有实参
对象名 = 类名(实参)
12.cls关键字
cls
关键字指向当前类。
13.self关键字
self
关键字指向当前对象。
14.super()函数
super()
函数用于在子类中调用父类的成员。
支持的成员:类方法、实例访问器属性、实例方法、构造函数,不支持类变量、静态方法、实例变量。
super().类方法()
super().实例访问器属性
super().实例方法()
super().__init__()
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/python/pythonlang/35573.html