1.init
初始化函数,定义实例属性
2.name
name_ 是当前模块名
if __name__ == "__main__":
main()
代表仅调用此模块中的main(),导入的模块中有main()方法也不调用
3.new
只有新式类才能用,继承object都是新式类
1.新式类开始实例化时,new()方法会返回cls(cls指代当前类)的实例,然后该类的 init()方法作为构造方法会接收这个实例(即self)作为自己的第一个参数,然后依次传入__new__ ()方法中接收的位置参数和命名参数。
class A(object):
pass
class B(A):
pass
class C(B):
def __new__(cls, *args, **kwargs):
return super().__new__(cls, *args, **kwargs)
# 等同于:
# return B.__new__(cls, *args,**kwargs)
# return A.__new__(cls, *args,**kwargs)
# return object.__new__(cls, *args,**kwargs)
2.如果没有cls则init不会被调用,如果cls位置是其他类名,则调用这个类
class Bar(object):
def __new__(cls,*agrs,**kwagrs):
return Bar.__new__(Foo,*agrs,**kwagrs)
为静态方法
__new__参考此链接
4.all
from A import *
all = [ ……] ,对应*覆盖的模块、类、函数等
参考此
5.doc
调用类或函数中第一个未被赋值的字符串
class Student():
'123'
print(Student().__doc__)
#123
6.str
把一个类实例变成字符串
用__str__
class Student():
def __init__(self, name, age):
self.name = name
self.age =age
def __str__(self):
return '%s的年龄是%d' % (self.name, self.age)
print(Student('liu', 20))
#liu的年龄是20
不用__str__
class Student():
def __init__(self, name, age):
self.name = name
self.age =age
def print(self): #改变了这里
return '%s的年龄是%d' % (self.name, self.age)
print(Student('liu', 20))
#<__main__.Student object at 0x00000000028280F0>
用__str__等效于
class Student():
def __init__(self, name, age):
self.name = name
self.age =age
def print(self):
return'%s的年龄是%d' % (self.name, self.age)
print(Student('liu', 20).print())