一、類初始
對象屬性和_ init _方法:
_ init _方法又叫做構(gòu)造法。在類創(chuàng)建對象的時(shí)候自動(dòng)調(diào)用、初始化對象屬性、聲明對象屬性。
self默認(rèn)參數(shù):
self是類中對象方法默認(rèn)參數(shù),調(diào)用帶有默認(rèn)參數(shù)self的方法,系統(tǒng)會(huì)自動(dòng)將當(dāng)前方法的對象傳給self。
class Person:
"""人"""
def __init__(self, name='', age=0):
# 聲明對象屬性
self.name = name
self.age = age
def eat(self):
print('吃飯')
# 聲明一個(gè)對象方法run
def run(self):
print('self',self)
#在對象方法中使用對象的屬性,直接用self去獲取屬性
print('%s跑起來'% (self.name))
self.eat()
#創(chuàng)建一個(gè)Person對象
p1 = Person('小明', 10)
二、屬性的增刪改查
1、查
方式一: 直接通過對象查找屬性;對象.屬性
方式二:getattr(對象,屬性名,默認(rèn)值)
通過方法getattr()獲取對象的指定屬性。
注意:1、不設(shè)置默認(rèn)值,屬性如果存在,就獲取屬性的值;如果不存在不,報(bào)錯(cuò)。
2、設(shè)置默認(rèn)值的情況下:屬性如果存在就獲取屬性的值,如果不存在,將默認(rèn)值作為結(jié)果輸出
class Dog:
"""狗??"""
# Dog類有name和age兩個(gè)屬性
def __init__(self, name='', age=0):
self.name = name
self.age = age
dog1 = Dog('才才')
print(getattr(dog1, 'name', None))
print(getattr(dog1, 'score', None))
才才
None
2、修改
方式一:將新值直接付給對應(yīng)的屬性 ;對象.存在的屬性 = 新值
dog1.name = '大黃'
方式二:setattr(對象,屬性名,新值)
setattr(dog1, 'name', '小黃')
方式三:對象._ setattr_(屬性名,新值)
dog1.__setattr__('name', '小黑')
3、增(對象添加屬性)
Python中可以動(dòng)態(tài)添加屬性
方式一:對象.不存在的屬性=值
dog1.sex = 'nan'
方式二:setattr(對象,不存在的屬性名,新值)
setattr(dog1,'score','100')
print(dog1.score)
方式三:對象.setattr(不存在屬性名,新值)
dog1.__setattr__('score',100)
print(dog1.score)
4、刪除屬性:
方式一: del 對象.屬性
del dog1.age
print(dog1.age) # AttributeError: 'Dog' object has no attribute 'age'
刪除以后再打印age屬性會(huì)出現(xiàn)報(bào)錯(cuò)。
方式二:delattr(對象,屬性名)
delattr(dog1, 'age')
方式三:對象.delattr(屬性名)
dog1.__delattr__('age')
5、判斷對象是否擁有某個(gè)屬性
方式:hasattr(對象,屬性名)
判斷對象是否擁有指定屬性
其返回值為bool值
result = hasattr(dog1, 'name')
print(result)
實(shí)例:
1、對象屬性的操作只對當(dāng)前那一個(gè)對象有效
class Person:
"""人"""
def __init__(self, name='', age=0, id_num='', sex=''):
self.name = name
self.age = age
self.id_num = id_num
self.sex = sex
p1 = Person('小明', 10)
# 給不存在的屬性賦值,就是添加屬性
p1.score = 100
print(p1.score+100)
del p1.name
# print(p1.name)
p2 = Person('luo', 30)
print(p2.name)
注意:
1.對對象屬性的增、刪、改、查是針對指定的那個(gè)一個(gè)對象。不會(huì)影響其他的對象
2.實(shí)際開發(fā)用的時(shí)候,一般只用獲取對象屬性的值和修改對象屬性的值。想要添加和刪除屬性,一般都是在init方法中去操作
2、
class Dog:
"""狗"""
# 通過給__slots__賦值,可以限制類中對象的屬性有哪些,防止一個(gè)不必要的屬性被添加
__slots__ = ('name', 'age', 'color')
def __init__(self, name='', age=0, color=''):
self.name = name
self.age = age
self.color = color
# self.sex = '男' # AttributeError,因?yàn)開_slots__中沒有'sex'
dog1 = Dog('笑話', 3, 'Yellow')
# dog1.name1 = '大黃'
# dog1.sex = '男'
del dog1.name
# 注意:__slots__中規(guī)定的屬性,只能少不能多。刪除屬性是不受影響的
6、內(nèi)置函數(shù)
1.類._ name_ : 獲取類的名字(只有類有這個(gè)屬性)
class_name = Dog.__name__
2.類.doc : 獲取類的說明文檔
print(Dog.__doc__)
3.dict
類.dict : 獲取類中所有的類屬性(類字段)和對應(yīng)的值的鍵值對 --> 結(jié)果是字典
對象.dict : 以鍵值對的形式獲取指定對象的所有的屬性和值
print(Dog.__dict__)
dog.sex = '男'
print(dog.__dict__)
- 類.module : 獲取類所在的模塊的名字
print(Dog.__module__, __name__)
- 類.bases : 獲取指定類的基類
print(Dog.__bases__)