首页 > 技术文章 > python-面向对象2

tour8 2020-06-13 22:39 原文

1、知识点

  • 类变量:类定义的时候,这个变量就定义好了
  • 实例变量(成员变量)、实例方法(成员方法)
  • 类方法:
    • 用@classmethod修饰的方法
    • 自带的方法,不用实例化就可以调用
    • 是公共的方法,在实例方法里可随意调用
    • 类方法里面不能调用实例方法、不能使用实例变量,可调用其他的类方法
  • 属性方法:看起来像一个变量的函数
    • 用@property修饰的方法
  • 静态方法:一个和类没有关系的方法,只是写在类里面而已
    • 用@staticmethod修饰的方法
  • 继承
  • 魔法方法
    • 一个类里面有一些特殊作用的方法
    • 类里面 __funname__ 都是魔法方法,有一些特殊作用

2、eg1:

 1 class Staff:
 2     '''员工类'''
 3 
 4     nationality = 'China' #类变量
 5 
 6     #类方法
 7     # 一些公共的方法,就用类方法
 8     # 类方法里面不能调用实例方法、不能使用实例变量
 9     @classmethod #装饰器,其实就是一个函数
10     def help(cls): # cls就是Staff(class)
11         print('这里的员工都是来自%s'%cls.nationality)
12 
13     @classmethod
14     def butie(cls):
15         print("大家都发500的补贴")
16 
17     @classmethod
18     def haha(cls):
19         boss = cls("BOSS",1,'老板办公室',1000000)
20         boss.get_salary()
21 
22     def __init__(self,name,id_no,position,salary):
23         self.name = name # 实例变量、成员变量
24         self.id_no=id_no
25         self.position = position
26         self.salary = salary
27 
28     def get_salary(self): # 实例方法、成员方法
29         print("%s这个月发了%s"%(self.name,self.salary))
30         self.butie()
31 
32     def my_self(self):
33         print("my name is %s,I'm from %s"%(self.name,self.nationality))
34         # 调用类方法
35         self.help();
36 
37 # #类变量
38 # print(Staff.nationality) #结果:China
39 #
40 # # 类方法
41 # Staff.help();
42 
43 Staff.haha()
44 
45 # Staff.nationality = 'Japan'
46 #
47 # # 实例化1
48 # lzh = Staff('lzh',1,'101',1200)
49 # lzh.my_self() # 结果:my name is lzh,I'm from Japan
50 #
51 # lzh.nationality = 'USA'
52 # lzh.my_self() #结果:my name is lzh,I'm from USA
53 #
54 #
55 # # 实例化2
56 # zsb = Staff('zsb',1,'101',1200)
57 # zsb.my_self() #结果:my name is zsb,I'm from Japan

 

eg2:

 1 import time
 2 
 3 class User:
 4     # 属性方法
 5     @property
 6     def work_age(self):
 7         self.help()
 8 
 9         create_time = 1528860238
10 
11         result = (time.time()-create_time)/(365*24*60*60)
12 
13         return round(result,1)
14 
15     #静态方法
16     #不能调用类里面的方法(实例方法、类方法)
17     #类里面的方法可以调用静态方法
18     @staticmethod
19     def help():
20         print('我是帮助文档,这个类是用户类')
21 
22 lzh = User()
23 # result = lzh.work_age()
24 # print(result)
25 
26 # 调用属性方法
27 print(lzh.work_age)

 

 

3、继承

eg1:

 1 class Lz:
 2     country = 'Beijing'
 3     house = 8
 4     money = 99999
 5 
 6     def driver(self):
 7         print('开车')
 8 
 9     def cook(self):
10         print('做法')
11 
12     def make_money(self):
13         print('挣钱')
14 
15 
16 class Lw:
17     def majiang(self):
18         print('majiang')
19 
20     def maicai(self):
21         print('maicai')
22 
23 
24 class Car:
25     # 私有的变量和私有的方法,不能继承
26     __key = '车轱辘下'
27     def run(self):
28         print(self.__key)
29         print('Car里的run')
30 
31 
32 
33 class bigCar(Car):
34     # 重写
35     def run(self):
36         print('bigCar里的run:拐弯跑')
37     def swim(self):
38         print('水上汽车')
39 
40 
41 #继承
42 class Xz(Lz,Lw):
43     pass
44 
45 lzh = Xz()
46 lzh.make_money()
47 lzh.maicai()

 

eg2:super()

 1 class Car:
 2     def run(self):
 3         print('run')
 4 
 5 class BigCar(Car):
 6     # 重写:直接覆盖
 7     def run(self):
 8         print('拐弯跑')
 9 
10 class SmallCar(Car):
11     # 重写:在原有功能上增加功能
12     def run(self):
13         #Car.run(self)
14         super().run() # 自动找到父类
15         print('充电')
16 
17 
18 car1 = SmallCar()
19 car1.run()

 

推荐阅读