加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python 面向对象类与类之间的关系

发布时间:2020-12-17 00:22:49 所属栏目:Python 来源:网络整理
导读:主要内容: 1. 依赖关系 2. 关联关系,组合关系,聚合关系 3. 继承关系 4. 类中的特殊成员 引子 大千世界,万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在面向对象的世界中.

主要内容:

  • 1. 依赖关系
  • 2. 关联关系,组合关系,聚合关系
  • 3. 继承关系
  • 4. 类中的特殊成员

引子

  • 大千世界,万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类.
  • 那事物之间存在着相对应的关系. 类与类之间也同样如此.
  • 在面向对象的世界中. 类与类中存在以下关系:依赖关系,关联关系,聚合关系,继承关系,实现关系? ?
  • 由于python是一门弱类型编程语言,并且所有的对象之间其实都是多态的关系.也就是说,所有的东西都可以当做对象来使用. 所以我们在写代码的时候很容易形成以上关系

1. 依赖关系

关于大象进冰箱的问题:

class Elephant:
    def __init__(self,name):
        self.name = name
    def open(self,ref):
        print("冰箱,开门吧")
        ref.open_door()
    def close(self,ref):
        print("冰箱关门吧")
        ref.close_door()
    def enter(self):
        print("进冰箱装自己")

class Fridge:
def init(self):
pass
def open_door(self):
print("冰箱打开了门")
def close_door(self):
print("冰箱关上了门")

E=Elephant("tony")
F1=Fridge()
E.open(F1)
E.enter()
E.close(F1)


<div class="cnblogs_code_toolbar">?

就是大象和冰箱之间的关系是一种依赖关系,大象可以选择任何一个冰箱(我们可以通过类来创造出很多个 冰箱),甚至作为大象我可以选择冰箱甚至可以进高压锅,可以说此时的大象有选择的权利.

2. 关联关系,聚合关系

class Boy:
    def __init__(self,name,character,girlfriend=None):
        self.name = name
        self.character = character
        self.girlfriend = girlfriend
    def xiangqin(self,girl):
        self.girlfriend = girl
    def eat(self):
        if self.girlfriend:
            print("吃东西好难,吃啥都不对")
        else:
            print("单身狗,狗粮够吗")
class Girl:
    def __init__(self,boyfriend):
        self.name = name
        self.boyfriend =boyfriend
    def eat(self):
        print ("%s在吃饭" % self.name)

g = Girl("排骨精","八戒")
b = Boy("猪八戒","呵呵")
b.xiangqin(g)
b.eat()


<div class="cnblogs_code_toolbar">?

这是典型的一对一的关联关系,两个类的对象紧密练习着,其实就是我需要你,你也属于我这就是关联关系

class School:
    def __init__(self,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,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)

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()


<div class="cnblogs_code_toolbar">?

老师必然属于?个学校. 换句话说,每个老师肯定有?个指定的工作机构. 就是学校,那老师的属性中必然关联着学校(一对多的情况)

3. 继承关系

class Base:
    def __init__(self,num):
        self.num = num
    def func1(self):
        print(self.num)
        self.func2()
    def func2(self):
        print(111,self.num)
class Foo(Base):
    def func2(self):
        print(222,self.num)
lst = [Base(1),Base(2),Foo(3)]
for obj in lst:
    obj.func1()

总结:

  • self在访问方法的顺序: 永远先找自己的,自己的找不到再找父类的.?
  • self就是你访问方法的那个对象,先找自己,然后在找父类的.?

4. 类中的特殊成员

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读