千峰筆記 物件屬性與類屬性 動態新增 運算子過載

2021-09-10 14:58:56 字數 2278 閱讀 8056

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...