• Python【面向对象编程】


    #1、python中,类名首字母都大写
    #2、在python3中,经典类和新式类没有任何区别
    #3、在python2中,经典类和新式类的区别主要体现在多继承上,经典类是深度优先,新式类是广度优先
    #4、在python3中,都是广度优先

    #定义一个【经典类】
    class Japanese:
    pass

    #定义一个【新式类】
    class Chinese(object):
    pass


    print("=============定义一个类===========")
      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文件的时候,这句话一点用都没有















  • 相关阅读:
    抓老鼠啊~亏了还是赚了?
    币值转换
    打印沙漏
    秋季学期学习总结
    PTA币值转化
    PTA作业
    秋季学习总结
    人生最重要的3个老师
    自我介绍
    vue入门(二) 让axios发送表单形式数据
  • 原文地址:https://www.cnblogs.com/mtszw/p/9087559.html
Copyright © 2020-2023  润新知