[Python]面向对象编程---类属性(2)

二、类属性

1、类的数据属性

    数据属性仅仅是所定义的类的变量,它们可以像任何其它变量一样在类创建后被使用。并且,要么由类中的方法来更新,要么是在主程序其他什么地方更新
这种属性叫静态变量或静态数据,它们表示这些数据是与它们所属的类对象绑定的,不依赖于任何类实例

>>> class C(object):
...     foo = 100
...
>>> print(C.foo)
100
>>> C.foo = C.foo + 1
>>> print(C.foo)
101
2、方法:是它所在类的固有属性,即使它们几乎都是通过实例来调用的

>>> class MyClass(object):
...     def myNoActionMethod(self):
...         pass
...
>>> mc = MyClass()
>>> mc.myNoActionMethod()
3、绑定(绑定及非绑定方法)

Python严格要求,没有实例,方法是不能被调用的。这种限制即Python所描述的绑定概念。

在此,方法必须绑定到一个实例才能直接被调用。非绑定的方法可能可以被调用,但实例对象一定要明确给出,才能保证调用成功。

>>> myNoActionMethod()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'myNoActionMethod' is not defined
>>> MyClass.myNoActionMethod()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: myNoActionMethod() missing 1 required positional argument: 'self'
4、查看类的属性
内建函数:
dir(): 返回对象属性的一个名字列表
vars(): 返回类__dict__属性的内容
__dict__: 返回一个字典,键是属性名,键值是相应属性对象的数据值

class MyClass(object):
    'MyClass class definition'
    myVersion = 1.1                 # 静态数据
    def showMyVersion(self):        # 方法
        print(MyClass.myVersion)
>>> dir(MyClass)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'myVersion', 'showMyVersion']

>>> vars(MyClass)
mappingproxy({'__doc__': 'MyClass class definition', 'myVersion': 1.1, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, 'showMyVersion': <function MyClass.showMyVersion at 0x00E17198>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__module__': '__main__'})

>>> print(MyClass.__dict__)
{'__doc__': 'MyClass class definition', 'myVersion': 1.1, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, 'showMyVersion': <function MyClass.showMyVersion at 0x00E17198>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__module__': '__main__'}
5、特殊的类属性

>>> MyClass.__name__             # 类的名字(字符串)
'MyClass'

>>> MyClass.__doc__              # 类的文档字符串
'MyClass class definition'

>>> MyClass.__bases__            # 类的所有父类构成的元组
(<class 'object'>,)
>>> MyClass.__base__             # 类的父类
<class 'object'>

>>> MyClass.__dict__             # 类的属性
mappingproxy({'__doc__': 'MyClass class definition', 'myVersion': 1.1, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, 'showMyVersion': <function MyClass.showMyVersion at 0x00E17198>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__module__': '__main__'})

>>> MyClass.__module__           # 类定义所在的模块
'__main__'

>>> a = MyClass()                # 定义实例
>>> a.__class__                  # 实例对应的类
<class '__main__.MyClass'>






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值