python-面向对象--组合(嵌套)


1     组合(嵌套)

1.1   例子

1.1.1 案例1

 1 class School(object):
 2 
 3     def __init__(self, name, address):
 4 
 5         self.name = name
 6 
 7         self.address = address
 8 
 9  
10 
11     def speech(self):
12 
13         print('讲课')
14 
15  
16 
17 obj1 = School('老男孩北京校区', '美丽富饶的沙河')
18 
19 obj2 = School('老男孩上海校区', '浦东新区')
20 
21 obj3 = School('老男孩深圳校区', '南山区')
22 
23 class Teacher(object):
24 
25     def __init__(self, name, age, salary):
26 
27         self.name = name
28 
29         self.age = age
30 
31         self.__salary = salary
32 
33         self.school = None
34 
35  
36 
37 t1 = Teacher('李杰', 19, 188888)
38 
39 t2 = Teacher('艳涛', 18, 60)
40 
41 t3 = Teacher('女神',16, 900000)
42 
43 # ############## 老师分配校区
44 
45 t1.school = obj1
46 
47 t2.school = obj1
48 
49 t3.school = obj2
50 
51 # ####################################
52 
53 # 查看t1老师,所在的校区名称/地址
54 
55 print(t1.school.name)
56 
57 print(t1.school.address)
58 
59 print(t1.name)
60 
61 print(t1.age)
62 
63 t1.school.speech()
View Code

1.1.2 案例2:

 1 class School:
 2     def __init__(self, address):
 3         self.address = address
 4 
 5 bj = School('北京校区')
 6 sh = School('上海校区')
 7 sz = School('深圳校区')
 8 
 9 class Course(object):
10     def __init__(self, name, period, price, school=None):
11         self.name = name
12         self.period = period
13         self.price = price
14         self.school = school
15 
16 
17 py1 = Course('Python全栈', 110, 19999, bj)
18 py2 = Course('Python全栈', 110, 19999, sh)
19 py3 = Course('Python全栈', 110, 19999, sz)
20 
21 l1 = Course('Linux运维', 110, 19999, bj)
22 l2 = Course('Linux运维', 110, 19999, sh)
23 
24 g1 = Course('Go开发', 119, 19999, bj)
25 
26 
27 class Grade(object):
28     def __init__(self, name, people, introduce, course=None):
29         self.name = name
30         self.people = people
31         self.introduce = introduce
32         self.course = course
33 
34 gr1 = Grade('全栈1期',20,'....',py1)
35 gr2 = Grade('全栈1期',20,'....',py2)
36 gr3 = Grade('Linux8期',20,'....',l2)
37 
38 
39 gr1.people
40 gr1.course.price
41 gr1.course.school.address
View Code

1.1.3 案例3

 1 class UserInfo(object):
 2     pass
 3 
 4 class Department(object):
 5     pass
 6 
 7 class StarkConfig(object):
 8 
 9     def __init__(self,num):
10         self.num = num
11 
12     def changelist(self,request):
13         print(self.num,request)
14 
15     def run(self):
16         self.changelist(999)
17 
18 class RoleConfig(StarkConfig):
19 
20     def changelist(self,request):
21         print(666,self.num)
22 
23 class AdminSite(object):
24     def __init__(self):
25         self._registry = {}
26 
27     def register(self,k,v):
28         self._registry[k] = v(k)
29 
30 site = AdminSite()                      #创建了一个AdminSite类的对象
31 site.register(UserInfo,StarkConfig)     #self._registry = { UserInfo:StarkConfig(UserInfo),Department:StarkConfig(Department )}
32 site.register(Department,StarkConfig)
33 print(len(site._registry)) # 2
34 for k,row in site._registry.items():
35     row.run()                   #row是values,StarkConfig(UserInfo)是一个对象,对象.方法()---》调用方法;在实例化的过程中传的参数是类名
36 
37 # 总结:
38 """
39 1. 对象中封装了什么?
40 2. self到底是谁?
41 """
42 
43  
View Code

 

1.2   类或对象能做字典的key

1 class  Foo:
2     pass
3 
4 user_info = {
5     Foo:1,
6     Foo():5
7 }
8 print(user_info)#{<class '__main__.Foo'>: 1, <__main__.Foo object at 0x0000018CF41D80B8>: 5}
View Code

 

1.3   对象中到底有什么?

 1 class Foo(object):
 2     def __init__(self,age):
 3         self.age = age
 4     def display(self):
 5         print(self.age)
 6 data_list = [Foo(8),Foo(9)]
 7 for item in data_list:
 8     print(item.age,item.display())
 9 '''
10 8
11 8 None
12 9
13 9 None
14 '''
View Code

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM