Python的类的组合

python中,类的加载顺序

类是在文件加载时,会跟着加载

1  类名

2  类中的变量,从上到下,依次进行

3 加载到方法时,方法内的内容不执行,但是会开辟一个空间用来存储方法内的数据

4 当类内的方法和变量都加载完成时,会将类名指向self参数。

class Student:        # 第一步
    def __init__(self,name,age,sex): # 第二步
        self.name = name
        self.age = age
        self.sex = sex
    a = 1        # 第三步
    b = 2       # 第四步
    def fun(): # 第五步
        pass
            #  第六步,类名指向self
yang = Student('小明',20,'男') 

5 如果类中存在两个名称相同的变量或者方法,那么输出后的内容是后加载的变量或者方法的内容

class Student:      
    def __init__(self,name,age,sex): 
        self.name = name
        self.age = age
        self.sex = sex
    a = 1        
    b = 2      
    a = 4    #  变量的输出结果是这个
    print(a)
    def fun():
        pass
    def fun():
        print("in the func")  # 函数的输出结果是这个

yang = Student('小明',20,'')     

类外创建对象时,每个self参数对应各自一个内存空间,并将信息增加到这个内存空间

 

每个对象的内存空间中有个类指针,相当于一个变量,里面存在着一个类的地址
如果自己的空间中有这个名字,那么他就直接在自己的空间中调用

class Student:      
    country = 'China'
    def __init__(self,name,age,sex): 
        self.name = name
        self.age = age
        self.sex = sex

zhang = Student('小明',23,'男’)
li= Student('小花',21,'女’)
li.country = 'us'
print(zhang.country)   # 输出结果为China
print(li.country)        # 输出结果为us

  当自己内存中不存在这个数据的情况下,它会根据指针到类中去查找,如果有就返回,如果没有就报错

  如果每个对象都需要调用同一个变量,那么他们需要的变量必须调用的是类中的变量,而不是自己内存中存在的变量。

主要是对一个对象.名字直接赋值,那么就是在这个对象的空间内创建了新的属性
对一个可变的数据类型内部的变化,那么仍然是所有的对象的类共享改变的成果

class B:
    l = [0]
    def __int__(self):
        self.name= name
b1 = B('小明')
b2 = B('小黑')


b1.l[0]+=1   # 因为l是可变类型,所以这类也改变了,类中的变量
print(b2.l[0])    #  结果为1
b1.l = [123]    # 这个值就是在b1中的变量,对类中的变量没影响
print(b2.l)        # 结果是0

耦合(相互纠缠)

组合: 一个类的对象是另一个类的对象的属性

类,就可以调用上面的类中的数据和方法

class Student:
    def __init__(self,name,num,course):
        self.name = name    # 这里就是调用了下面那个类的属性,course的对象成了另一个类的对象的属性
        self.num = num
        self.course = course

class Course:
    def __init__(self,name,price,period):
        self.name = name
        self.price = price
        self.period = period
python = Course('python',25000,'6 months')
s1 = Student('小黑',10085,python)
s2 = Student('小洪',10084,python)
s3 = Student('小李',10083,python)
# print(s1.__dict__)
python.price = 30000
python.period = '7 months'
原文地址:https://www.cnblogs.com/mk-lovefreedom/p/10601569.html