核能来袭-类与类之间的关系 本节主要内容:
1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 大千世界,万物之间皆有规则和规律.我们的类和对象是对大千世界中的所有事物进行归类.那事物之间存在着相对应的关系类与类之间也同样如此.面向对象 的世界中.类与类中存在以下的关系. 1.依赖关系2.关联关系 3.组合关系 4.聚合关系 5.继承关系
一.类与类之间的依赖关系
class Elephant:
def __init__(self,name):
self.name=
name
def open(self,ref):
print(
"大象要开门了.默念三声.关!")
ref.open_door()
def close(self,close):
print(
"大象要关门了.默念三声.关!")
def take(self):
print(
"钻进去")
class Refrigerator:
def open_door(self):
print(
"冰箱门被打开了")
def close_door(self):
print(
"冰箱门被关上了")
r=
Refrigerator()
el=Elephant(
"神奇的大象")
el.open(r)
el.take()
el.close(r)
此时,我们说,大象和冰箱之间就是依赖关系.我用着你.但是你不属于我.这种关系是最弱的
二.类与类之间的关联关系
二.类与类之间的关联关系
class Boy:
def __init__(self, name, xingge, girlFriend=
None):
self.name =
name
self.xingge =
xingge
self.girlFriend =
girlFriend
def yujian(self, girl):
self.girlFriend =
girl
def chi(self):
if self.girlFriend:
print(
"随便吃! %s 和 %s" %
(self.name, self.girlFriend.name))
else:
print(
"单身狗, 吃什么吃?")
class Girl:
def __init__(self, name ):
self.name =
name
def chi(self):
print(
"%s在吃饭" %
self.name)
girl = Girl(
"白骨精")
alex = Boy(
"金王",
"娘")
alex.chi()
alex.yujian(girl)
alex.chi()
#找到alex的女朋友
alex.girlFriend.name
alex.girlFriend.chi()
一个对多个.
class School:
def __init__(self, name, address, phone):
self.name =
name
self.address =
address
self.phone =
phone
self.__teach_list =
[]
def zhaopin(self, t):
self.__teach_list.append(t)
def display(self):
for el
in self.
__teach_list:
print(el.name, el.hobby)
class Teacher:
def __init__(self, name, gender, salary, hobby, school):
self.name =
name
self.gender =
gender
self.salary =
salary
self.hobby =
hobby
self.school =
school
oldboy_bj = School(
"北京老男孩",
"美丽富饶的沙河",
"10086")
oldboy_sh = School(
"北京老男孩, 上海分校",
"上海浦东",
"10010")
oldboy_sz = School(
"北京老男孩, 深圳分校(骑士计划)",
"南山区",
"10000")
t1 = Teacher(
"配齐",
"男", 200000,
"上课", oldboy_bj)
t2 = Teacher(
"太白",
"男", 150000,
"开车", oldboy_bj)
t3 = Teacher(
"Eggon",
"男", 123456,
"钻研技术", oldboy_sh)
t4 = Teacher(
"高鑫",
"女", 45678,
"相夫教子", oldboy_sz)
t5 = Teacher(
"日天",
"男", 666,
"看天", oldboy_sz)
# print(t3.school.address) # 找到老师所在的学校的地址
oldboy_bj.zhaopin(t1)
oldboy_bj.zhaopin(t2)
oldboy_bj.display()
oldboy_sh.zhaopin(t3)
oldboy_sz.zhaopin(t4)
oldboy_sz.zhaopin(t5)
oldboy_sz.display()
至于组合关系和聚合关系其实代码上差别不大.都是把另一个类的对象作为这个类的属性来传递和保存.只是在含义上会有些不同而已.
5.继承关系
def __init__(self):
pass
def method(self):
pass
__hash__ =
None
print(hash(Foo))
print(hash(Foo()))
既然可以hash.那就是说字典的key可以是对象或者类
dic =
{}
dic[Foo] = 123
dic[Foo()] = 456
print(dic) {<
class '__main__.Foo'>: 123, <
__main__.Foo object at 0x000002576BA282B0>: 456
}
class Base:
def __init__(self, num):
self.num =
num
def func1(self):
print(self.num)
self.func2()
def func2(self):
print(
"Base.func2")
class Foo(Base):
def func2(self):
print(
"Foo.func2")
obj = Foo(123
)
obj.func1() #123 Foo.func2
总结:self在访问方法的顺序: 永远先找自己的,自己的找不到再找父类的.
四. 类中的特殊成员 什么是特殊成员呢? __init_()就是
⼀个特殊的成员.说白了.带双下划线的那一坨.这些方法在特殊的场景的时候会被自动的执行. 比如, 1. 类名() 会自动执行__init__() 2. 对象() 会自动执行__call__() 3. 对象[key] 会自动执行__getitem__()4. 对象[key] = value 会自动执行__setitem__() 5. del对象[key] 会自动执行 __delitem__()6. 对象+对象 会自动执行 __add__() 7. with 对象 as 变量 会自动执行__enter__ 和__exit__ 8. 打印对象的时候 会自动执行 __str__ 9. 干掉可哈希 __hash__ == None 对象就不可哈希了. 创建对象的真正步骤: 首先,在执行类名()的时候. 系统会自动先执行__new__()来开辟内存.此时新开辟出来的内 存区域是空的. 紧随其后, 系统动调用__init__()来完成对象的初始化工作.按照时间轴来算. 1. 加载类2. 开辟内存(__new__) 3. 初始化(__init__) 4. 使用对象干xxxxxxxxx 类似的操作还有很多很多. 我们不需要完全刻意的去把所有的特殊成员全都记住.实战中也用不到那么多.用到查就是了.
转载于:https://www.cnblogs.com/Li-Kai-168/p/9714464.html
相关资源:python100例.zip