第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

章節(jié)
問答
課簽
筆記
評論
占位
占位

Python獲取對象信息

在前面,我們通過isinstance()方法,可以判斷一個對象是否是某個類型,從某種意義上來講,通過isinstance()方法,我們獲取到了一個對象的一些信息,那有沒有別的方法可以獲取到對象更多的信息呢?
通過type()函數(shù),可以獲得變量的類型。

n = 1
s = 'this is a string'
type(n) # ==> <class 'int'>
type(s) # ==> <class 'str'>

 

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

p = Person('Alice', 'Female')
s = Student('Bob', 'Male', 100)
type(p) # ==> <class '__main__.Person'>
type(s) # ==> <class '__main__.Student'>

通過dir()方法,可以獲取變量的所有屬性:

>>> n = 1
>>> dir(n)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', ...]
>>> s = 'this is a string'
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', ...]

在dir列出的屬性中,有很多是以下劃線開頭和結(jié)尾的,這些都是特殊的方法,稱為內(nèi)建方法,在后面,我們還會學(xué)習(xí)這些方法。
而對于自定義對象:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def who(self):
        return 'I am a Person, my name is {}'.format(self.name)

p = Person('Alice', 'Female')
dir(p)

['__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__', 'gender', 'name', 'who']

對于實(shí)例變量,dir()返回所有實(shí)例屬性,包括__class__這類有特殊意義的屬性。注意到方法who也是p的一個屬性。
dir()返回的屬性是字符串列表,如果已知一個屬性名稱,要獲取或者設(shè)置對象的屬性,就需要用 getattr() 和 setattr( )函數(shù)了。

?>>> getattr(p, 'name') # 獲取name屬性
'Alice'
>>> setattr(p, 'name', 'Adam') # 設(shè)置新的name屬性
>>> s.name
'Adam'
>>> getattr(s, 'age') # 獲取age屬性,但是屬性不存在,報錯:
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'age'
>>> getattr(s, 'age', 20) # 獲取age屬性,如果屬性不存在,就返回默認(rèn)值20:
20

任務(wù)

對于Person類的定義:

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

希望除了namegender外,可以提供任意額外的關(guān)鍵字參數(shù),并綁定到實(shí)例,請修改 Person 的__init__()定義,完成該功能。

?不會了怎么辦

提示:結(jié)合在入門課程學(xué)習(xí)的向函數(shù)傳遞任意關(guān)鍵字參數(shù)的方法以及剛剛學(xué)習(xí)的setattr()方法。

參考答案:

class Person(object):
    def __init__(self, name, gender, **kw):
        self.name = name
        self.gender = gender
        for k, v in kw.items():
            setattr(self, k, v)

p = Person('Bob', 'Male', age=18, course='Python')
print(p.age)
print(p.course)
||

提問題

寫筆記

公開筆記
提交
||

請驗(yàn)證,完成請求

由于請求次數(shù)過多,請先驗(yàn)證,完成再次請求

加群二維碼

打開微信掃碼自動綁定

您還未綁定服務(wù)號

綁定后可得到

  • · 粉絲專屬優(yōu)惠福利
  • · 大咖直播交流干貨
  • · 課程更新,問題答復(fù)提醒
  • · 賬號支付安全提醒

收藏課程后,能更快找到我哦~

使用 Ctrl+D 可將課程添加到書簽

邀請您關(guān)注公眾號
關(guān)注后,及時獲悉本課程動態(tài)

舉報

0/150
提交
取消
全部 精華 我要發(fā)布
全部 我要發(fā)布
最熱 最新
只看我的

手記推薦

更多

本次提問將花費(fèi)2個積分

你的積分不足,無法發(fā)表

為什么扣積分?

本次提問將花費(fèi)2個積分

繼續(xù)發(fā)表請點(diǎn)擊 "確定"

為什么扣積分?