python 动态属性
生活随笔
收集整理的這篇文章主要介紹了
python 动态属性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?
先來看一下一個常見的Python類的定義:
class Person(object):name = Noneage = Nonedef __init__(self,name,age):self.name = nameself.age = ageif __name__=="__main__":p = Person(name='jianglegege',age=16)print(p.name,p.age) # jianglegege 16?
來一個需求:
每一個person實例都要有一個sid屬性用來記錄社保號
?
寫法 1): 直接改Person類
class Person(object):name = Noneage = Nonesid = Nonedef __init__(self,name,age,sid):self.name = nameself.age = ageself.sid = sid?
寫法 2):創建完實例后單獨為實例設置sid屬性
class Person(object):name = Noneage = Nonedef __init__(self,name,age):self.name = nameself.age = ageif __name__=="__main__":p = Person(name='jianglegege',age=16)p.sid = '9527'print(p.name,p.age,p.sid)?
?
這兩種寫法各自的問題:
1、對于第一種寫法如果再來一個需求你又要改動Person類的定義、你這個類封閉不了。
?
2、對于第二種寫法要求在創建完成Person實例后都要記得為實例增加一個sid屬性、而它和第一種一樣在應對新的需求
方面也同樣的不靈活
?
?
一種靈活的寫法:
class Person(object):name = Noneage = Nonedef __init__(self,*args,**kwargs):for k,v in kwargs.items():setattr(self,k,v)if __name__=="__main__":p = Person(name='jianglegege',age=16,sid='9527')print(p.name,p.age,p.sid)通過上面的寫法有兩個好處 1):Person類現在直接任意多屬性了、2):Person類也被封閉了 ;但是它也有一個不好的地方,比較有在創建p實例的時候沒有
傳遞sid這個值給構造函數,那么p實例就不會有這個屬性。
?
?
?
?
?
-----
轉載于:https://www.cnblogs.com/JiangLe/p/9071012.html
總結
以上是生活随笔為你收集整理的python 动态属性的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DockPanel 类
- 下一篇: 实验3 --俄罗斯方块 with