python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)

本文详细介绍了Python中类的加载顺序、类与对象的命名空间原理,并通过具体示例展示了如何利用类和对象进行组合,实现代码的复用与维护。

今日大纲

1.类的加载顺序

2.类和对象的命名空间

3.组合

 

 

 

1.类的加载顺序

加载顺序:

类中从上至下写入内存,遇到方法只加载进内存中,方法不会执行,最后类名指向这个类的内存空间地址

 

2.类和对象的命名空间

类里存放的内容:

  1.静态变量

  2.动态变量(方法)

注:在操作静态变量时候最好使用类名来操作,这样所有的对象在操作这个静态变量都会发生变化

对象存放的内容:

  1.对象的属性

  2.类指针

对象的取值顺序:

  1.对象空间 

  2.类空间

注:对象在类空间都没有找到值会报错

类的取值顺序:

  1.类空间

注:如果类里不存在则报错

 

类里有可变数据类型的例子:

class Test:
    lis = []
    def __init__(self,name):
        self.name = name

t1 = Test('t1')
t1.lis.append('t1')
t2 = Test('t2')
print(t2.lis)    # ['t1'] 在对象空间操作类空间里的可变数据类型,所有对象和类都会用改变后的结果
t2.lis = ['t2']  # 这样相当于在t2对象空间里赋值了一个key = value
print(t2.lis)    # ['t2']
print(Test.lis)  # ['t1']
print(t2.__dict__) 
# {'name': 't2', 'lis': ['t2']}

注:对象.变量名 = value 是在对象空间添加一个变量名和value

 

3.组合

类的对象的属性是另一个类的对象。

松耦合的表现:

  重复的值(写死的值)都是通过另一个类的对象来操作,如果要修改也只需要修改另一个类的对象属性。

组合的例子:

class Course:
    def __init__(self,name,price,time):
        self.name = name
        self.price = price
        self.time = time

class Student:
    def __init__(self,name,age,sex,course):
        self.name = name
        self.age = age
        self.sex = sex
        self.course = course
    def pri(self):
        msg = """
            姓名:%s
            年龄:%s
            性别:%s
            报名课程:%s
            课程价格:%s
            课程时长:%s
        """ %(self.name,self.age,self.sex,self.course.name,self.course.price,self.course.time)
        print(msg)

python = Course('python',111,'6个月')   # 先创建python课程
zz = Student('zz',11,'boy',python)  # 实例化对象在课程参数那把python对象传入
tt = Student('tt',22,'boy',python)
zz.pri()
python.price = 11111    # 如果创建的学生对象很多,只需要修改课程对象里的属性即可
python.time = '7个月'
tt.pri()
"""
            姓名:zz
            年龄:11
            性别:boy
            报名课程:python
            课程价格:111
            课程时长:6个月
        
            姓名:tt
            年龄:22
            性别:boy
            报名课程:python
            课程价格:11111
            课程时长:7个月
"""

 

转载于:https://www.cnblogs.com/zezhou/p/10601714.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值