18_python_类关系

一世执手 提交于 2020-02-06 22:41:25
一、类与类之间的关系
    
    1、依赖关系
 1 class Elephant:
 2 
 3     def __init__(self, name):
 4         self.name = name
 5 
 6 
 7     def open(self, ref): # 想要的是一个冰箱。 是哪个冰箱没有制定
 8         print("冰箱哥哥, 开门把")
 9         ref.open_door()
10 
11     def close(self, ref): # 依赖关系
12         print("冰箱哥哥, 我进来了。 关门把")
13         ref.close_door()
14 
15     def jin(self):
16         print("进冰箱装自己")
17 
18 class Refrigerator:
19 
20     def open_door(self):
21         print("冰箱陌陌的打开了自己的门")
22     def close_door(self):
23         print("冰箱陌陌的关上了自己的门 ")
24 
25 # class GaoYaGuo:
26 #     def open_door(self):
27 #         print("冰箱陌陌的打开了自己的门")
28 #     def close_door(self):
29 #         print("冰箱陌陌的关上了自己的门 ")
30 
31 
32 alex = Elephant("李杰")
33 bx1 = Refrigerator()
34 
35 #
36 alex.open(bx1)
37 alex.jin()
38 alex.close(bx1)
39 object

    2、关联关系

 1 # class Boy:
 2 #     def __init__(self, name, xingge, girlFriend=None):
 3 #         self.name = name
 4 #         self.xingge = xingge
 5 #         self.girlFriend = girlFriend
 6 #
 7 #     def yujian(self, girl):
 8 #         self.girlFriend = girl
 9 #
10 #     def chi(self):
11 #         if self.girlFriend:
12 #             print("随便池! %s 和 %s" % (self.name, self.girlFriend.name))
13 #         else:
14 #             print("单身狗, 池什么池?")
15 #
16 # class Girl:
17 #     def __init__(self, name, boyFriend):
18 #         self.name = name
19 #         self.boyFriend = boyFriend
20 #     def chi(self):
21 #         print("%s在吃饭" % self.name)
22 #
23 # girl = Girl("白骨精")
24 #
25 # alex = Boy("金王", "娘")
26 # alex.chi()
27 #
28 # alex.yujian(girl)
29 # alex.chi()
30 #
31 # # 找到alex的女朋友
32 # # alex.girlFriend.name
33 # alex.girlFriend.chi()
34 
35 
36 
37 # 一个对多个.
38 
39 class School:
40     def __init__(self, name, address, phone):
41         self.name = name
42         self.address = address
43         self.phone = phone
44         self.__teach_list = []
45 
46     def zhaopin(self, t):
47         self.__teach_list.append(t)
48 
49     def display(self):
50         for el in self.__teach_list:
51             print(el.name, el.hobby)
52 
53 
54 
55 
56 class Teacher:
57     def __init__(self, name, gender, salary, hobby, school):
58         self.name = name
59         self.gender = gender
60         self.salary = salary
61         self.hobby = hobby
62 
63         self.school = school
64 
65 oldboy_bj = School("北京老男孩", "美丽富饶的沙河", "10086")
66 oldboy_sh = School("北京老男孩, 上海分校", "上海浦东", "10010")
67 oldboy_sz = School("北京老男孩, 深圳分校(骑士计划)", "南山区", "10000")
68 
69 
70 t1 = Teacher("配齐", "男", 200000, "上课", oldboy_bj)
71 t2 = Teacher("太白", "男", 150000, "开车", oldboy_bj)
72 t3 = Teacher("Eggon", "男", 123456, "钻研技术", oldboy_sh)
73 t4 = Teacher("高鑫", "女", 45678, "相夫教子", oldboy_sz)
74 t5 = Teacher("日天", "男", 666, "看天", oldboy_sz)
75 
76 
77 # print(t3.school.address) # 找到老师所在的学校的地址
78 
79 oldboy_bj.zhaopin(t1)
80 oldboy_bj.zhaopin(t2)
81 oldboy_bj.display()
82 
83 oldboy_sh.zhaopin(t3)
84 
85 oldboy_sz.zhaopin(t4)
86 oldboy_sz.zhaopin(t5)
87 
88 oldboy_sz.display()

    3、类名与对象是否可作为key

  1 # 可哈希. 内部是否哈希算法 __hash__
  2 
  3 # class Foo(object): # 所有的类都会默认继承object
  4 #     def __init__(self):
  5 #         pass
  6 #     def func(self):
  7 #         pass
  8 #     __hash__ = None
  9 #
 10 # dic = {}
 11 # dic[Foo] = "123456" # 类名是可哈希的。
 12 # dic[Foo()] = "刘伟" # 类中是否包含__hash__
 13 # print(dic)
 14 
 15 # 默认的类和对象都是可哈希的
 16 
 17 # class Base:
 18 #     def __init__(self, num):
 19 #         self.num = num
 20 #
 21 #     def func1(self):
 22 #         print(self.num)
 23 #
 24 # class Foo(Base):
 25 #     pass
 26 #
 27 # obj = Foo(123)
 28 # obj.func1() # 123
 29 
 30 # class Base:
 31 #     def __init__(self, num):
 32 #         self.num = num
 33 #     def func1(self):
 34 #         print(self.num)
 35 #
 36 # class Foo(Base):
 37 #     def func1(self):
 38 #         print("Foo. func1", self.num)
 39 #
 40 # obj = Foo(123)
 41 # obj.func1() # ???? Foo. func1 123
 42 
 43 #
 44 # class Base:
 45 #     def __init__(self, num):
 46 #         self.num = num
 47 #     def func1(self):
 48 #         print(self.num)
 49 #         self.func2()
 50 #     def func2(self):
 51 #         print("Base.func2")
 52 #
 53 # class Foo(Base):
 54 #     def func2(self):
 55 #         print("Foo.func2")
 56 #
 57 # obj = Foo(123)
 58 # obj.func1() # 123
 59 
 60 # class Base:
 61 #     def __init__(self, num):
 62 #         self.num = num
 63 #
 64 #     def func1(self):
 65 #         print(self.num)
 66 #         self.func2()
 67 #
 68 #     def func2(self):
 69 #         print(111, self.num)
 70 #
 71 # class Foo(Base):
 72 #     def func2(self):
 73 #         print(222, self.num)
 74 #
 75 # lst = [Base(1), Base(2), Foo(3)]
 76 # for obj in lst:
 77 #     obj.func2()
 78 
 79 # class Base:
 80 #     def __init__(self, num):
 81 #         self.num = num
 82 #
 83 #     def func1(self):
 84 #         print(self.num)
 85 #         self.func2()
 86 #
 87 #     def func2(self):
 88 #         print(111, self.num)
 89 #
 90 # class Foo(Base):
 91 #     def func2(self):
 92 #         print(222, self.num)
 93 #
 94 # lst = [Base(1), Base(2), Foo(3)]
 95 # for obj in lst:
 96 #     obj.func1()
 97 
 98 # 1
 99 # 111 1
100 # 2
101 # 111 2
102 # 3
103 # 222 3
104 
105 # 总结: self当前访问xx方法的那个对象

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!