Python札记30_属性

浏览: 913

类属性

class  A:
x = 6
A.x

  • 定义一个类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__ # 以字典的形式显示类的所有属性和值




  • 类属性和类进行绑定,可以进行自定义、删除、修改等操作
  • 每个类都有特殊的属性,特殊属性不需要修改

创建实例和实例属性

创建实例

创建实例一般通过调用类来进行是实现。之前的例子总,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对象。


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


  • 实例的属性是可以变化的,能够进行修改;
  • 类的属性不能修改,类属性和类进行绑定,不受实例的影响;
foo.x += 1  # 修改实例属性
foo.x # 结果是7
A.x # 结果仍然是6


  • 实例的新属性将原来的覆盖,如果将新属性删除,原来的属性将能够进行访问






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




    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]

推荐 0
本文由 皮大大 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册