Python【面向对象编程】

mac2022-06-30  91

#1、python中,类名首字母都大写#2、在python3中,经典类和新式类没有任何区别#3、在python2中,经典类和新式类的区别主要体现在多继承上,经典类是深度优先,新式类是广度优先#4、在python3中,都是广度优先#定义一个【经典类】class Japanese: pass#定义一个【新式类】class Chinese(object): passprint("=============定义一个类===========") 1 class Person(object): 2 3 #构造函数:可有可无,不是必须存在的 4 #在实例化一个类的对象时,自动执行构造函数,不需要我们手动显式的调用构造函数 5 def __init__(self,skin='white',nose='high',eye='blue'): 6 self.skin_color = skin 7 self.nose = nose 8 self.eye_color = eye 9 self.__language='english' 10 11 # 析构函数:在实例被销毁的时候自动执行,不需要我们手动调用析构函数 12 # 析构函数可有可无,不是必须存在的,一般可在该函数中,执行一些关闭数据连接的操作 13 def __del__(self): 14 # .......... 15 # .......... 16 # .......... 此处省略掉关闭数据库连接的代码行 17 pass 18 19 20 # 类变量:公共的变量,每个实例都可以用 21 country = 'usa' 22 #实例变量:比如前面构造函数中的【self.nose】,【self.skin_color】等,可以在所有实例方法中访问,也可以在类外部访问 23 #私有变量:比如前面构造函数中的【self.__language】,只能在类内部访问,类外部无法访问到,变量名是两个下划线开头命名的 24 25 #实例方法:self代表本类对象 26 #可以访问类变量和类方法 27 #可以访问静态方法 28 #可以访问属性方法 29 def run(self): 30 print(self.country) 31 self.eat_class_1() 32 self.sleep_static_1() 33 self.walk_property_1 34 self.run_1() 35 36 37 def run_1(self): 38 print("实例方法") 39 40 #属性方法:通过实例对象调用,不要通过类进行调用 41 @property 42 def walk_property(self): 43 print(self.country) 44 self.eat_class_1() 45 self.sleep_static_1() 46 self.run_1() 47 self.walk_property_1 48 49 @property 50 def walk_property_1(self): 51 print("属性方法") 52 53 #类方法: 54 # 1、不用实例化就可以直接调用 55 # 2、它可以通过cls使用类变量 56 # 3、它不能调用这个类里面的其他实例方法和实例变量 57 # 4、可以访问静态方法 58 # 5、cls代表对的就是Person 59 @classmethod 60 def eat_class(cls): 61 print(cls.country) 62 cls.sleep_static_1() 63 cls.walk_property_1 64 cls.eat_class_1() 65 66 67 @classmethod 68 def eat_class_1(cls): 69 print('类方法') 70 71 #静态方法 72 # 1、一个普通函数,只不过是写在类里面而已,它用不了类变量、类方法、实例变量、实例方法、属性方法、静态方法 73 @staticmethod 74 def sleep_static(): 75 try: 76 self.run_1() 77 except Exception as e: 78 print(e) 79 try: 80 self.walk_property_1 81 except Exception as e: 82 print(e) 83 84 try: 85 self.sleep_static_1() 86 except Exception as e: 87 print(e) 88 89 try: 90 self.eat_class_1() 91 except Exception as e: 92 print(e) 93 94 @staticmethod 95 def sleep_static_1(): 96 print('这个是静态方法,它和一个没写在类里面的函数一样') 97 98 #私有方法:只能在类内部访问,类外部无法访问到,方法名是两个下划线开头命名的 99 def __speak(self): 100 print ("这是个私有方法") 101 102 #实例方法:方法名是一个下划线开头命名的 103 def _shopping(self): 104 self._flower = "rose" 105 print("方法名一个下划线开头的实例方法") 106 107 def tool(self): 108 print(self.__language) 109 return self.__speak() print("==========修改类变量===========") 1 #实例化两个美国人 2 p = Person() 3 p1 = Person() 4 5 p.country='USA' 6 #Person.country = 'USA' 7 print("p.........:",p.country) 8 print('p1.......',p1.country) 9 print('Person.......',Person.country) 10 #结论:p.country='USA'和Person.country = 'USA'两种赋值方式有区别: 11 #1、通过Person.country = 'USA'这种方式给【country】类变量赋值,则:Person.country、p.country、p1.country 三个的值都是USA, 12 #说明影响的是类的所有实例以及类本身 13 #2、通过p.country='USA'这种方式给【country】类变量赋值,则:p.country的值是USA,而Person.country和p1.country的值是空, 14 #说明影响的是当前实例,并不会影响其他实例和类本身 print("========通过实例调用四种不同类型的方法=========") 1 print(p.walk_property) #通过实例调用属性方法:正确 2 print(p.eat_class()) #通过实例调用类方法:正确 3 print(p.sleep_static()) #通过实例调用静态方法:正确 4 print(p.run()) #通过实例调用实例方法:正确 5 print(p._shopping()) #通过实例调用一个下划线开头的实例方法:正确 6 print(p._flower) #通过实例调用一个下划线开头的成员变量:正确 7 8 print(p.tool()) #通过tool()方法间接调用私有方法和私有变量 print("========通过类调用四种不同类型的方法========") 1 print(Person.walk_property) #通过类调用属性方法:错误 2 print(Person.eat_class()) #通过类调用类方法:正确 3 print(Person.sleep_static()) #通过类调用静态方法:正确 4 #print(Person.run()) #通过类调用实例方法:错误 print("=======类的继承==========") 1 #支持多继承,比如class Japanese(Person,XXX,XX) 2 class Japanese(Person): 3 def play(self): 4 print("我是一个子类") 5 6 #重写父类方法 7 def run(self): 8 # 调用父类方法 9 Person().run() 10 11 #如果继承多个父类,super会根据继承的父类顺序,从左至右依次去找每一个父类,如果在某个父类中找到该方法,则停止寻找, 12 #直接实例化一个第一次找到的那个父类的对象,然后再调用父类的方法 13 super(Japanese, self).run() 14 print("重写父类方法") 15 16 j1 = Japanese(nose='flat',skin='yellow',eye='black') 17 j2 = Japanese() 18 Japanese.country='Japan' 19 print('Japanese.......',Japanese.country) 20 print('j1........',j1.country) 21 print('j2........',j2.country) # if __name__ == '__main__':# 1、判断python文件是在别的地方导入的,还是直接运行的这个python文件# 2、这句话一般是做调试的时候用的。# 3、如果是直接运行这个python文件的时候,这句话一点用都没有

转载于:https://www.cnblogs.com/mtszw/p/9087559.html

相关资源:python3面向对象编程 pdf文件
最新回复(0)