1 class Car: # class是关键字,表示类 2 def __init__(self, color, pai, pailiang): # self表示当前类的对象. 当前你创建 的是谁, 谁来访问的这个方法.那这个self就是谁. 3 self.color = color 4 self.pai = pai 5 self.pailiang = pailiang 6 def run(self, speed): 7 print("车可以跑%s迈" % speed) 8 c = Car("red", "京A66666", "2.0T") # 创建对象,类名称后加括号即可,即为实例化 9 c.run(100) # 这时. python会自动把对象c传递给run方法的第一个参数位置.
1 class 类名: 2 def __init__(self,参数1,参数2): 3 self.对象的属性1 = 参数1 4 self.对象的属性2 = 参数2 5 6 def 方法名(self):pass 7 8 def 方法名2(self):pass 9 10 对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西 11 #类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法 12 #括号里传参数,参数不需要传self,其他与init中的形参一一对应 13 #结果返回一个对象 14 对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可 15 对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可
class DerivedClassName(BaseClassName1):<statement-1>. . .<statement-N>
需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找基类中是否包含方法
1 #类定义 2 class people: 3 #定义基本属性 4 name = '' 5 age = 0 6 #定义私有属性,私有属性在类外部无法直接进行访问 7 __weight = 0 8 #定义构造方法 9 def __init__(self,n,a,w): 10 self.name = n 11 self.age = a 12 self.__weight = w 13 def speak(self): 14 print("%s 说: 我 %d 岁。" %(self.name,self.age)) 15 #单继承示例 16 class student(people): 17 grade = '' 18 def __init__(self,n,a,w,g): 19 #调用父类的构函 20 people.__init__(self,n,a,w) 21 self.grade = g 22 #覆写父类的方法 23 def speak(self): 24 print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade)) 25 26 s = student('ken',10,60,3) 27 s.speak() 28 结果: 29 ken 说: 我 10 岁了,我在读 3 年级
(2) 多继承
class DerivedClassName(Base1, Base2, Base3):<statement-1>. . .<statement-N>
需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。(MRO算法)
1 #类定义 2 class people: 3 #定义基本属性 4 name = '' 5 age = 0 6 #定义私有属性,私有属性在类外部无法直接进行访问 7 __weight = 0 8 #定义构造方法 9 def __init__(self,n,a,w): 10 self.name = n 11 self.age = a 12 self.__weight = w 13 def speak(self): 14 print("%s 说: 我 %d 岁。" %(self.name,self.age)) 15 #单继承示例 16 class student(people): 17 grade = '' 18 def __init__(self,n,a,w,g): 19 #调用父类的构函 20 people.__init__(self,n,a,w) 21 self.grade = g 22 #覆写父类的方法 23 def speak(self): 24 print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade)) 25 #另一个类,多重继承之前的准备 26 class speaker(): 27 topic = '' 28 name = '' 29 def __init__(self,n,t): 30 self.name = n 31 self.topic = t 32 def speak(self): 33 print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic)) 34 #多重继承 35 class sample(speaker,student): 36 a ='' 37 def __init__(self,n,a,w,g,t): 38 student.__init__(self,n,a,w,g) 39 speaker.__init__(self,n,t) 40 test = sample("Tim",25,80,4,"Python") 41 test.speak() #方法名同,默认调用的是在括号中排前地父类的方法 42 结果: 43 我叫 Tim,我是一个演说家,我演讲的主题是 Python
1 class Parent: # 定义父类 2 def myMethod(self): 3 print ('调用父类方法') 4 class Child(Parent): # 定义子类 5 def myMethod(self): 6 print ('调用子类方法') 7 c = Child() # 子类实例 8 c.myMethod() # 子类调用重写方法 9 super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法
1 class Animal: 2 def chi(self): 3 print("动物就知道吃") 4 class Pig(Animal): 5 def chi(self): 6 print("猪在吃") 7 class Haski(Animal): 8 def chi(self): 9 print("哈?士奇在吃") 10 class Alasika(Animal): 11 def chi(self): 12 print("阿拉斯加在吃") 13 class SiYangYuan: 14 def yanng_animal(self, ani): 15 ani.chi() 16 17 zhu = Pig() 18 erha = Haski() 19 ala = Alasika() 20 alex = SiYangYuan() 21 alex.yanng_animal(zhu) 22 alex.yanng_animal(erha) 23 alex.yanng_animal(ala)
1 一:我们定义的类的属性到底存到哪里了?有两种方式查看 2 dir(类名):查出的是一个名字列表 3 类名.__dict__:查出的是一个字典,key为属性名,value为属性值 4 5 二:特殊的类属性 6 类名.__name__# 类的名字(字符串) 7 类名.__doc__# 类的文档字符串 8 类名.__base__# 类的第一个父类(在讲继承时会讲) 9 类名.__bases__# 类所有父类构成的元组(在讲继承时会讲) 10 类名.__dict__# 类的字典属性 11 类名.__module__# 类定义所在的模块 12 类名.__class__# 实例对应的类(仅新式类中)