1、__init__构造方法
实例化时自动调用
__init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上
class Myclass: """一个简单的实例""" # 构造方法 实例化时自动调用 def __init__(self, realpart, imagpart): self.data = [] self.r = realpart self.i = imagpart x = Myclass(3.0, -4.5) type(x) print(x.r) print(x.i)
类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。
self 不是 python 关键字,我们把他换成 runoob 也是可以正常执行的:
#/use/bin/python3 class myself: def test(self): print(self) print(self.__class__) x = myself() x.test()
2、类的方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。
#/usr/bin/python3 class mydef: def __init__(self, name, title, address): self.n = name self.t = title self.a = address def people(self): print("name is {}; title is {}; address is {};".format(self.n, self.t, self.a)) p = mydef('yaradish', 'learn', 'shanghai'); p.people()
3、继承
class DerivedClassName(modname.BaseClassName):
#调用父类的构造方法 其他方法 可以直接使用
#/usr/bin/python3 class mydef: def __init__(self, name, title, address): self.n = name self.t = title self.a = address def people(self): print("name is {}; title is {}; address is {};".format(self.n, self.t, self.a)) p = mydef('yaradish', 'learn', 'shanghai') p.people() class two(mydef): def __init__(self, name, title, address, height): #self.h = height #调用父类的构造方法 mydef.__init__(self,name,title,address) self.h = height def children(self): print("name is {};height is {}".format(self.n, self.h)) c = two('yaradish', 'learn', 'shanghai',"180cm") c.children() c.people() #直接使用父类中的方法
4、多继承
class DerivedClassName(Base1, Base2, Base3):
继承的时候需要先将构造函数拿过来
class sample(speaker,student): a ='' def __init__(self,n,a,w,g,t): student.__init__(self,n,a,w,g) 继承构造函数 speaker.__init__(self,n,t) test = sample("Tim",25,80,4,"Python") test.speak() #方法名同,默认调用的是在括号中排前地父类的方法
5、属性及方法
两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问