对象的特征

实例属性:类被实例化后才会具有的属性。

类属性:类定义后就存在,而且不需要实例化

私有属性:使用__开头的变量名加以标志,只有类对象自己能访问;使用_开头的变量名加以标注,应该只有类对象及其子类能访问(非强制),单下划线是标志性的不是限制性的,在类外是可以修改的

特殊属性:保存对象的元数据。

__doc__;__name__对象的名称;__dict__;__module__;__base__包含类对象的全部基类

特殊属性https://www.cnblogs.com/Security-Darren/p/4604942.html

#一般在__init__()方法中创建并初始化
class TestClass:
    # 类属性使得相同类的不同实例共同持有相同变量
    com=100
    def __init__(self,length,width,height):
        # 直接使用即定义self.<属性名>
        self.length=length
        self.width=width
        self.height=height
        self.__prv=10
    def _volume(self):
        self._volume = self.length * self.width * self.height
    def pr(self):
        print(self.length,self.width,self.height)
        print(self.__prv)

test1=TestClass(3,4,5)
# 类外使用实例名.属性名方式定义和引用
print(test1.height)
# 5
test1.pr()
#3,4,5
#10
# 私有属性在类外无法改变
test1.__prv=11
test1.pr()
#3,4,5
#10
print(test1.__prv)
#11
# 相同类的不同实例,实例属性是不相关的
test2=TestClass(7,8,9)
print(test2.height)

#一般不建议在__init__()方法之外创建了初始化实例属性
# 一般不推荐类外定义和修改,修改可以单独定义方法

深入类的属性

1.当类属性与实例属性重名的时候:以实例名.属性名引用时,优先引用实例属性;以类名.属性名引用时,只能引用类属性

2.以字符串的形式来操作类的属性/方法的方式。

工具函数:hasattr(obj_name,"属性名"),是否具有某个属性

setattr(obj_name,"属性名","值"),getattr(obj_name,'"属性名")

3.属性包装:将方法包装成属性,以隐藏相关实现。控制属性的类型或范围;虚拟属性(由其它属性处理后得来)

三种属性操作(装饰器):可读:@property;可写:@<property-name>.setter;可删:@<property-name>.deleter 

4.描述符:将实现特殊协议方法类作为另一个类的属性。用来拦截和控制属性访问并可以重复使用。

协议方法:__get__();__set__();__deleter__()

分类:数据描述符(实现全部协议方法);非数据描述符(实现部分协议方法);所有类成员函数都是非数据描述符。

5.__call__方法,让类的实例如函数一样可调用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值