一.类的绑定方法
1 # 绑定给对象的
2 class Student():
3 def __init__(self, name, age, gender):
4 self.name = name
5 self.age = age
6 self.gender = gender
7
8 def tell_info(self):
9 print('name:%s, age:%s,gender:%s' % (self.name, self.age, self.gender))
10
11 stu = Student('ly', 18, 'male')
12 stu.tell_info() # stu.tell_info(stu)
13
14
15 # 绑定给类的
16 class Mysql():
17 def __init__(self, ip, port):
18 self.ip = ip
19 self.port = port
20
21 @classmethod
22 def from_conf(cls):
23 res = cls('100.233.122.234', 3306)
24 return res
25
26
27 print(Mysql.from_conf().__dict__)
二.非绑定方法
1 class Student():
2 school = 'shanghai'
3
4 def __init__(self, name, age, gender):
5 self.name = name
6 self.age = age
7 self.gender = gender
8
9 @staticmethod
10 def create_id():
11 import uuid
12 return uuid.uuid4()
13
14
15 stu = Student('jason', 18, 'male')
16 print(Student.create_id().__dict__)
17 print(stu.create_id())
三.如何隐藏属性
1 # 隐藏
2 '''
3 1. 在类定义阶段,发生了语法上的变形_类名__属性名
4 2. 隐藏对外不对内
5 3. 只有在类定义阶段发生变形,其他情况都不发生变形了
6
7 为什么要隐藏: 类里面的隐藏属性, 类外部可以使用,但是目的不是让类外部使用的,类外部要是想用,在类内部开放接口进行访问
8 可以达到对外部数据的严格控制
9 '''
10
11
12 class Student():
13 __school = 'shanghai'
14
15 def __init__(self, name, age):
16 self.name = name
17 self.age = age
18
19 def __tell_info(self, name, age):
20 print('name:%s, age:%s' % (self.name, self.age))
21
22
23 def get_school(self):
24 return self.__school
25
26
27 def set_school(self, v):
28 if type(v) is not str:
29 print('数据类型不合法')
30 return
31
32 self.__school = v
33
34
35 stu1 = Student('jason', 18)
36 # print(stu1.get_school())
37 print(Student.__dict__)
38
39 print(stu1._Student__school)
40 print(stu1._Student__tell_info('jason', 18))
41 print(stu1.get_school())
42 stu1.set_school('jason')
43 print(stu1.get_school())
四.property装饰器
1 class Student():
2 __school = 'SH' # _Student__school => _类名__属性名
3
4 def __init__(self, name, age):
5 self.__name = name
6 self.age = age
7
8 def __tell_info(self): # _Student__tell_info => _类名__函数名
9 print('name: %s, age: %s' % (self.__name, self.age))
10
11 @property # 把方法伪装成属性
12 def name(self):
13 return "name:%s" % self.__name
14
15 @name.setter
16 def name(self, v):
17 if type(v) is not str:
18 print('数据类型不合法')
19 # if isinstance(v, str):
20 return
21 self.__name = v
22
23 @name.deleter
24 def name(self):
25 print('不让删')
26
27 stu = Student('ly', 18)
28 print(stu.get_name())
29
30 stu.name = 123
31 print(stu.name)
32
33 del stu.name
34
35
36 # 练习
37 class Bmi():
38 def __init__(self, height, weight):
39 self.height = height
40 self.weight = weight
41
42 @property
43 def get_bmi(self):
44 return self.weight / (self.height ** 2)
45
46 bmi = Bmi(1.8, 70)
47 print(bmi.get_bmi)
48
49
50 # 了解
51
52 class Student():
53 __school = 'SH' # _Student__school => _类名__属性名
54
55 def __init__(self, name, age):
56 self.__name = name
57 self.age = age
58
59 def __tell_info(self): # _Student__tell_info => _类名__函数名
60 print('name: %s, age: %s' % (self.__name, self.age))
61
62 def get_name(self):
63 return "name:%s" % self.__name
64
65 def set_name(self, v):
66 if type(v) is not str:
67 print('数据类型不合法')
68 # if isinstance(v, str):
69 return
70 self.__name = v
71
72 def del_name(self):
73 print('不让删')
74
75 # 了解
76 name = property(get_name, set_name, del_name)
77
78
79 stu = Student('ly', 18)
80 print(stu.xxx)
81
82 stu.name = 'aaa'
83 print(stu.name)