博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象(七)属性方法的添加
阅读量:5244 次
发布时间:2019-06-14

本文共 3747 字,大约阅读时间需要 12 分钟。

​ 通常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。下来我就讲下添加属性和方法,同时也将下限值添加属性方法。

添加属性

​ 给一个实例添加属性和方法时,只有对象能使用,对类添加方法和属性时,为类属性和类方法

>>> class Peopre(object):    """docstring for Peopre"""    def __init__(self):        pass        ... ... ... ... ... >>> p=Peopre()>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__': 
, '__dict__':
, '__weakref__':
})>>> p.__dict__{}# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# 对实例添加属性>>> p.name='张三'>>> p.name'张三'>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__':
, '__dict__':
, '__weakref__':
})# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# 对类添加属性,添加的为类属性>>> Peopre.name='name'>>> Peopre.age='12'>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__':
, '__dict__':
, '__weakref__':
, 'name': 'name', 'age': '12'})>>> p1=Peopre()>>> p1.name'name'>>> p1.age'12'>>> p.name'张三'

添加方法

>>> class Peopre(object):    """docstring for Peopre"""    def __init__(self):        pass... ... ... ... >>> def hi():        print("你好")... ... >>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__': 
, '__dict__':
, '__weakref__':
})# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-# 添加的方法为类方法>>> Peopre.hi=hi>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__':
, '__dict__':
, '__weakref__':
, 'hi':
})>>> Peopre.hi
>>> Peopre.hi()你好>>> def hello():... print("hello!")... >>> p = Peopre()>>> p.hi
>>>> p.hi()Traceback (most recent call last): File "
", line 1, in
TypeError: hi() takes 0 positional arguments but 1 was given# -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*- # 添加的为普通方法>>> p.hello = hello>>> p.hello()hello!>>> p.__dict__{'hello':
}>>>

删除属性、方法

删除的方法:

  • del 对象.属性名
  • delattr(对象, "属性名")
>>> class Peopre(object):    """docstring for Peopre"""    def __init__(self, name):        self.name = name    def hi(self):        print("我的名字是:%s"%self.name)... ... ... ... ... ... >>> p = Peopre("张三")>>> p.hi()我的名字是:张三>>> p.__dict__{'name': '张三'}>>> del(p.name)>>> p.__dict__{}#   删除方法>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__': 
, 'hi':
, '__dict__':
, '__weakref__':
})>>> def hello():... print("你好")... >>> Peopre.hello = hello>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__':
, 'hi':
, '__dict__':
, '__weakref__':
, 'hello':
})>>> del(Peopre.hello)>>> Peopre.__dict__mappingproxy({'__module__': '__main__', '__doc__': 'docstring for Peopre', '__init__':
, 'hi':
, '__dict__':
, '__weakref__':
})>>>

__slots__

​ 限制该class能添加的属性. 但__slots__定义的属性仅对当前类起作用,对继承的子类是不起作用的.

>>> class Peopre(object):    """docstring for Peopre"""    __slots__ = ("name","age")... ... ... >>> p = Peopre>>> p = Peopre()>>> p.name= "张三">>> p.age= 14>>> p.height = 170Traceback (most recent call last):  File "
", line 1, in
AttributeError: 'Peopre' object has no attribute 'height'# 对继承的子类是不起作用的>>> class Test(Peopre): pass ... ... ... >>> t = Test()>>> t.height = 170>>>

转载于:https://www.cnblogs.com/yangliguo/p/8158674.html

你可能感兴趣的文章
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>
poj 3164 最小树形图(朱刘算法)
查看>>
服务器内存泄露 , 重启后恢复问题解决方案
查看>>
android一些细节问题
查看>>
KDESVN中commit时出现containing working copy admin area is missing错误提示
查看>>
利用AOP写2PC框架(二)
查看>>
【动态规划】skiing
查看>>
java定时器的使用(Timer)
查看>>
ef codefirst VS里修改数据表结构后更新到数据库
查看>>
boost 同步定时器
查看>>
[ROS] Chinese MOOC || Chapter-4.4 Action
查看>>
简单的数据库操作
查看>>
解决php -v查看到版本与phpinfo()版本不一致问题
查看>>
iOS-解决iOS8及以上设置applicationIconBadgeNumber报错的问题
查看>>