情况一:子类需要自动调用父类的方法:子类不重写__init__()方法,实例化子类后,会自动调用父类的__init__()的方法。
情况二:子类不需要自动调用父类的方法:子类重写__init__()方法,实例化子类后,将不会自动调用父类的__init__()的方法。
情况三:子类重写__init__()方法又需要调用父类的方法:使用super关键词:
super(子类,self).__init__(参数1,参数2,....) class Son(Father): def __init__(self, name): super(Son, self).__init__(name)
Property()函数
在新式类中返回属性值
class property([fget[, fset[, fdel[, doc]]]])
- fget -- 获取属性值的函数
- fset -- 设置属性值的函数
- fdel -- 删除属性值函数
- doc -- 属性描述信息
所用的变量名必须使用带有下划线的变量
可以让你对受限制访问的属性使用点语法
常见运算符重载方法
(31条消息) python 运算符重载_Claroja-CSDN博客
(31条消息) 浅析Python运算符重载_viclee-CSDN博客_python运算符重载的作用
方法名
重载说明
运算符调用方式
__init__
构造函数
对象创建: X = Class(args)
__del__
析构函数
X对象收回
__add__/__sub__
加减运算
X+Y, X+=Y/X-Y, X-=Y
__or__
运算符|
X|Y, X|=Y
_repr__/__str__
打印/转换
print(X)、repr(X)/str(X)
__call__
函数调用
X(*args, **kwargs)
__getattr__
属性引用
X.undefined
__setattr__
属性赋值
X.any=value
__delattr__
属性删除
del X.any
__getattribute__
属性获取
X.any
__getitem__
索引运算
X[key],X[i:j]
__setitem__
索引赋值
X[key],X[i:j]=sequence
__delitem__
索引和分片删除
del X[key],del X[i:j]
__len__
长度
len(X)
__bool__
布尔测试
bool(X)
__lt__, __gt__,
__le__, __ge__,
__eq__, __ne__
特定的比较
依次为X<Y,X>Y,X<=Y,X>=Y,
X==Y,X!=Y
注释:(lt: less than, gt: greater than,
le: less equal, ge: greater equal,
eq: equal, ne: not equal
)
__radd__
右侧加法
other+X
__iadd__
实地(增强的)加法
X+=Y(or else __add__)
__iter__, __next__
迭代
I=iter(X), next()
__contains__
成员关系测试
item in X(X为任何可迭代对象)
__index__
整数值
hex(X), bin(X), oct(X)
__enter__, __exit__
环境管理器
with obj as var:
__get__, __set__,
__delete__
描述符属性
X.attr, X.attr=value, del X.attr
__new__
创建
在__init__之前创建对象
实例:
import types
class Animal(object):#设置动物类
a = 'cat' #赋值
def __init__(self, name):#初始化
self.name = name
@classmethod#设置为一个类方法
def run(cls):#在类外定义新类run
print('%s在奔跑' % cls.a)
Animal.runn = run#将run方法添加给类
Animal.runn()#输出
class vector:#定义类
def __init__(self,a):#初始化
self.a=a
def __pow__(self, power, modulo=2):#平方运算符重载
return power*power
def __cmp__(self, other):#比较运算符重载
if self.a>other.a:
return self.a
else:
return other.a
a=vector(95)#定义对象a
b=vector(100)#定义对象b
print(a.__pow__(95,2))#输出平方
print(b.__pow__(100,2))#输出平方
print(a.__cmp__(b))#输出最大值