zoukankan      html  css  js  c++  java
  • 类的成员和嵌套(建模)

    一. 类的成员共分为三类: 字段, 方法, 属性

    class Foo:
    
        country = '中国'       # 静态字段
    
        def __init__(self, name):
            self.name = name          # 普通字段
    
        def func(self):             # 普通方法, 至少有一个self参数
            pass
    
        @staticmethod               # 静态方法, 无默认参数
        def func2():
            pass
    
        @classmethod                # 类方法, 至少有一个cls参数
        def func3(cls):
            pass
    
        @property                   # 属性
        def func4(self):
            pass
    

      

    一. 字段: 静态字段, 普通字段

    通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段

    静态字段访问方法

    静态字段属于类, 静态字段通过类访问, 静态字段在内存中只保存一份

    print(Foo.country)

    普通字段访问方法

    普通字段属于对象, 普通字段需要通过对象来访问, 普通字段在每个对象中都要保存一份

    obj = Foo('123')

    print(obj.name)


    二. 方法: 普通方法, 静态方法, 类方法

    三种方法在内存中都归属于类, 区别在于调用方式不同

    普通方法: 由对象调用, 至少一个self参数, 执行普通方法时, 自动将调用该方法的对象赋值给self

    obj = Foo('1232')

    obj.func()

    静态方法: 由类调用, 无默认参数

    Foo.func3()

    类方法: 由类调用, 至少一个cls参数, 执行类方法时, 自动将调用该方法的类复制给cls

    Foo.func2()

    相同点: 对于所有的方法而言, 均属于类(非对象)中, 所以, 在内存中也只保存一份

    不同点: 方法调用者不同, 调用方法时自动传入的参数不同

    三. 属性

    定义时, 在普通方法的基础上添加 @property 装饰器, 属性仅有一个self参数

    调用时, 无需括号, 这样节省时间

    对于简单的方法, 当无需传参且有返回值时, 可以使用 @property

    obj = Foo('1232')

    obj.func4


    四, 字段, 方法, 属性都有私有和公有, 需要在前面加上__, 例如def __func(): pass __country = 'China'

    私有字段, 方法, 属性在调用时, 一般情况下都无法访问, 需要在类中访问

    在继承时, 子类无法查看父类的私有字段, 方法, 属性

    对于简单的方法, 当无需传参且有返回值时, 可以使用 @ property

    五. 嵌套

    class People(object):
        def __init__(self, name, address):
            self.name = name
            self.address = address
    
        def play(self):
            print('玩')
    
    
    obj1 = People('企稳', '1000000')
    obj2 = People('戊二醛', '1010000')
    
    
    class Province(object):
        def __init__(self, name, location):
            self.name = name
            self.location = location
            self.people= None
    
    
    p1 = Province('江苏', 'china')
    p2 = Province('北京', 'china')
    
    p1.people = obj1
    p2.people = obj2
    
    print(p1.people.name)
    print(p1.people.address)
    print(p1.name)
    print(p1.location)
    p1.people.play()
    

      

  • 相关阅读:
    hud 1397
    hdu 1211
    hdu 1124
    hdu 1104
    1788
    hdu 1796
    sdut 2169
    hdu 1019
    $http post 取不到数据
    sql
  • 原文地址:https://www.cnblogs.com/NachoLau/p/9550576.html
Copyright © 2011-2022 走看看