面向?qū)ο缶幊?
1 內(nèi)置的類屬性
內(nèi)置類屬性:python中每個類都擁有內(nèi)置的類屬性
__name__
__doc__
__dict__
__module__
__bases__
舉例說明:
class Cat():
'''貓類'''
number = 0
def __init__(self,name = '',color = ''):
self.name = name
self.color = color
def run(self):
print('%s在跑'%self.name)
@staticmethod
def shout():
print('喵')
@classmethod
def get_number(cls):
print('貓的數(shù)量:%d' %cls.number)
cat1 = Cat('小花','white')
#1. 類.__name__ 獲取類的名字(字符串)
print(Cat.__name__)
#2. 類.__doc__ 獲取類的說明文檔
print(Cat.__doc__)
#3. 類.__dict__ 獲取類所有的類屬性和類屬性的值,以鍵值對的形式存到字典中
# 對象.__dict__ 將對象的所有屬性和對應(yīng)的值轉(zhuǎn)換為字典的元素,
print(Cat.__dict__)
print(cat1.__dict__)
#4. 類.__module__ 獲取當(dāng)前類所在的模塊的名字
print(Cat.__module__)
#4. 類.__bases__ 查看當(dāng)前類的父類
print(Cat.__bases__)
2屬性私有化
python中類的屬性和方法的私有化:直接在屬性名和方法名前加 _(命名的時候以‘—’開頭)
屬性或者方法私有:不能再外部直接使用晋被,可以在類的內(nèi)部使用
class Person:
'''人類'''
def __init__(self,name='',age = 0):
self.name = name
self.__age = age
def show_age(self):
print(self.__age)
def __run(self):
print('跑')
if __name__ == '__main__':
p1 = Person('張三',30)
print(p1.name)
p1.show_age()
3.getter和setter
屬性假的私有化:聲明對象屬性的時候,在屬性名前面加一個‘_’,用來告訴別人這個屬性不可以直接使用
要通過getter和setter來獲取屬性的值和修改屬性的值
1.getter:獲取屬性的值
格式:
def 屬性名(self):
代碼塊
returen self._屬性名
2.setter:給屬性賦值
@屬性名.setter
def 屬性名(self,new_value):
代碼塊
Self._屬性名 = new_value
ps:一個屬性必須要有g(shù)etter才能添加setter,但使用getter不一定必須要有setter
class Student:
'''學(xué)生類'''
def __init__(self,name ='',):
#聲明屬性的時候愿棋,前面加一個'_'是為了告訴別人這個屬性不能直接使用
self._name = name
self._score = 0
self._age = 0
#給屬性 _name 添加getter
@property
def name(self):
return self._name
@property
def score(self):
return self._score
#給屬性 _name 添加setter
@name.setter
def name(self,name):
self._name = name
@score.setter
def score(self,score):
self._score = score
if __name__ == '__main__':
stu1 = Student()
stu1.name = '李四'
# stu1._name = '張三'
# print(stu1._name)
print(stu1.name)
stu1.score =10
print(stu1.score)
4.繼承
4.1繼承基礎(chǔ)
python中類是可以繼承的澡谭,并且支持多繼承
語法格式:
class 類名(父類列表):
'''類的說明文檔'''
屬性
方法
python中所有的類默認(rèn)繼承為object
4.2可以繼承的內(nèi)容
繼承:直接擁有父類的屬性和方法(繼承后父類的屬性和方法依舊存在)
可以繼承的內(nèi)容:
a.對象的屬性和方法
b.類的字段和類方法,靜態(tài)方法(私有的繼承無意義厦坛,即不能繼承)
c.slots魔法不會被繼承
d.getter和setter可以被繼承
class Person:
def __init__(self):
self.name = ''
self.age = 0
self.sex = '男'
def eat(self):
print(self.name+'在吃飯')
class Student(Person):
pass
stu1 = Student()
stu1.name = '花'
print(stu1.name)
stu1.eat()