zoukankan      html  css  js  c++  java
  • 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'
  • 相关阅读:
    Winform中实现ZedGraph曲线图缩放后复原功能
    MySQL Workbench 安装失败 Mysql workbench requires the visual C++ 2019 redistributable package
    MySQL Workbench 8.0提示SSL connection error: SSL is required but the server doesn‘t support it
    域名证书有效,但是访问提示不安全连接
    图片Base64编码
    centos系统设置防火墙
    《中有成就秘笈》之中央密严刹土
    Arweave
    去中心化身份聚合器
    区块链跨链技术
  • 原文地址:https://www.cnblogs.com/mk-lovefreedom/p/10601569.html
Copyright © 2011-2022 走看看