Python札记30_属性和数据

作者: 皮皮大 | 来源:发表于2019-07-04 09:18 被阅读0次

    类属性

    class  A:
        x = 6 
    A.x
    
    image.png
    • 定义一个类A,A中有个变量x引用的对象是6
    • x称之为类A的属性,6称之为属性的值
    • A.x称之为调用类属性的方式
    • 如果想调用某个类的属性,使用英文的句号.
    • 类属性仅与其所定义的类绑定,这种属性本质上就是类中的变量。比如例子中,x是一个变量,也是类A的属性。
    • 类属性也称之为静态变量静态数据

    在Python中万物皆对象,类也是对象。对象是有属性和方法的,类也有属性和方法。属性是可以进行增加和删除等操作的。

    class A:
       x = 6    # 定义一个属性
    A.x
    
    A.y = 10   # 增加一个属性
    del A.x  # 删除以后再调用则报错
    A.y = 4   # 修改属性的值
    dir(A)  # 通过dir查看具体的方法
    ['__class__',
     '__delattr__',
     '__dict__',
     '__dir__',
     '__doc__',
     '__eq__',
     '__format__',
     '__ge__',
     '__getattribute__',
     '__gt__',
     '__hash__',
     '__init__',
     '__init_subclass__',
     '__le__',
     '__lt__',
     '__module__',
     '__ne__',
     '__new__',
     '__reduce__',
     '__reduce_ex__',
     '__repr__',
     '__setattr__',
     '__sizeof__',
     '__str__',
     '__subclasshook__',
     '__weakref__']
    
    A.__base__   # 显示父类
    A.__dict__  # 以字典的形式显示类的所有属性和值
    
    image.png image.png image.png
    • 类属性和类进行绑定,可以进行自定义、删除、修改等操作
    • 每个类都有特殊的属性,特殊属性不需要修改

    创建实例和实例属性

    创建实例

    创建实例一般通过调用类来进行是实现。之前的例子总,boy实例就是通过调用了Person类来实现的。

    class Person:       # 定义一个Person类
        """
        This is a sample of class   # 注释部分
        """
        
       def __init__(self, name):      # 初始化函数;传入另一个参数name
            self.name = name
    
        def get_name(self):
            return self.name      # 通过get_name函数返回self.name也就是初始化函数中参数name的值
    
        def color(self, color):
            d = { }   
            d[self.name] = color   # 向字典中添加键值name:color对并返回
            return d
    
    # 调用Person类
    if __name__ == "__main__":
        boy = Person("xiaoming")     # 利用Person类创建实例boy
        print(boy.name)
        name = boy.get_name()   # 加上括号的称之为方法(函数),调用函数即方法
        print(name)
        boy_color = boy.color("black")
        print(boy_color)
    
    • 类是实例的工厂,一个类可以创建多个实例。美女肯定不止西施一个,王昭君也是,赵飞燕也是,刘亦菲也是呀
    • 当类被调用后,就可以创建实例,并检查是否有__init__方法。
    • 没有则返回实例对象,有则调用,将实例对象作为第一个参数self传进去,理解这句话:实例是boy,当做参数传给self,就是说‘boy.name = name’

    init函数

    • __init__()没有return语句 ,如果非要写,就写return None。下面的报错提示语法错误,init不能返回int对象。
      image.png
    class Person:
        def __int__(self, name, lang="python", website="www.baidu.com"):  # 属性的另一种定义
            self.name = name  # name就是函数中传进来参数的值;lang、website相同
            self.lang = lang
            self.website = website
            self.email = "123456@qq.com"    # 增加一个属性
    
    • init初始化函数的第一个参数必须是self
    • init函数没有返回值

    实例属性

    与类相同,实例具有的属性称之为实例属性

    class  A:
        x = 6 
    foo = A()   # 根据类A创建一个实例foo,实例foo具有属性
    foo.x
    
    image.png
    • 实例的属性是可以变化的,能够进行修改;
    • 类的属性不能修改,类属性和类进行绑定,不受实例的影响;
    foo.x += 1  # 修改实例属性
    foo.x  # 结果是7
    A.x   # 结果仍然是6
    
    image.png
    • 实例的新属性将原来的覆盖,如果将新属性删除,原来的属性将能够进行访问


      image.png
    • 修改类的属性,实例属性跟着变化


      image.png

    总结

    • 和类属性一样,实例也具有自己的属性
    • 实例属性能够进行任意修改
    • 实例属性的修改不影响类属性,即类属性不因实例属性而变化
    • 类属性能够影响实例属性,因为实例是通过调用类来实现的

    特殊情形

    当类中变量引用的是一个可变对象,类和实例的属性能够相互影响。

    bar.y.append(5)  # 修改实例属性
    bar.y
    B.y   # 类的属性跟着改变
    [1, 2, 3, 4, 5]
    
    B.y.append(6)   # 修改类属性
    B.y
    bar.y  # 实例属性跟着变
    [1, 2, 3, 4, 5, 6]
    
    image.png

    相关文章

      网友评论

        本文标题:Python札记30_属性和数据

        本文链接:https://www.haomeiwen.com/subject/sixhhctx.html