class person(object):
#這裡的屬性實際上屬於類屬性(用類名來呼叫)
def __init__(self, name):
#物件屬性
self.name = name
print(person.name)
per = person(「tom」)
#物件屬性的優先順序高於類屬性
print(per.name)
#動態的給物件新增物件屬性
per.age = 18#只針對於當前物件生效,對於類建立的其他物件沒有作用
print(person.name)
per2 = person(「lilei」)
#刪除物件中的name屬性,再呼叫會使用到同名的類屬性
del per.name
print(per.name)
#注意:不要將物件屬性與類屬性重名,因為物件屬性會遮蔽掉類屬性。但是當刪除物件屬性後,又能使用類屬性了
import types import methodtype
#建立乙個空類
class person(object):
__slots__ = (「name」, 「age」, 「speak」)
per = person()
#動態新增屬性,這體現了動態語言的特點(靈活)
per.name = 「tom」
print(per.name)
#動態新增方法///(偏函式)
def say(self):
print(「my name is 「 + self.name)
per.speak = methodtype(say, per)
per.speak()
如果想要限制例項的屬性怎麼辦?
如,只允許給物件新增name,age,height,weight屬性
定義類時,定義乙個特殊的屬性(__slots__),可以限制動態新增的屬性
#per.height = 170
#print(per.height)
per.weight = 70
可以允許對受限制訪問的屬性使用點語法
class person(object):
def __init__(self, age):
#屬性直接對外暴露
#self.age = age
#限制訪問
self.__age = age
'''def getage(self):
return self.__age
def setage(self):
if age < 0:
age = 0
self.__age = age
'''#方法名為受限制的變數去掉雙下劃線
@property
def age(self):
return self.__age
@age.setter #去掉下劃線.setter
def age(self, age)
if age < 0:
age = 0
self.__age = age
per = person(18)
#不安全,沒有資料的過濾
per.age = -10
#使用限制訪問,需要自己寫set和get方法才能訪問
#per.setage(15)
#print(per.getage())
per.age = 100 #相當於呼叫setage
print(per.age)
print(1 + 2)
print(「1」 + 「2」)
#不同的型別用加法會有不同的解釋
class person(object):
def __init__(self, num):
self.num = num
#運算子過載
def __add__(self, other):
return person(self.num + other.num)
def __str__(self):
return 「num = 「 + str(self.num)
per1 = person(1)
per2 = person(2)
print(per1 + per2) # per1 + per2 === per1.__add__(per2)
print(per1.__add__(per2))
print(per2)
物件導向(三) 例項屬性與類屬性
例項屬性和類屬性 1 概念 2 區別 1 概念上 2 宣告位置 3 訪問方式 4 修改形式 定義學生類,屬性 name,age,gender class student gender 男 類屬性 公共資源 def init self,name,age self.name name self.age ...
Python物件導向學習筆記 類 屬性 方法
函式 python2 python3 定義普通類 class name object class name 建構函式 def init self,parameter1,parameter2 析構函式 def del sel,parameter1,parameter2 檢視型別 type 檢視屬性 d...
物件導向 類的繼承與重用父類屬性或方法
類的繼承 一 類分經典類和新式類 1 在python2中,不帶 object 的是經典類,帶 object 的是新式類 2 在python3中,帶和不帶 object 都是新式類 3 經典類的繼承查詢順序是深度優先 4 新式類的繼承查詢順序是廣度優先 python3.8.3 classa objec...