@staticmethod和@classmethod都可以直接類名.方法名()來呼叫,那他們有什麼區別呢?
從它們的使用上來看:
@staticmethod不需要表示自身物件的self和自身類的cls引數,就跟使用函式一樣。
@classmethod也不需要self引數,但第乙個引數需要是表示自身類的cls引數。
如果在@staticmethod中要呼叫到這個類的一些屬性方法,只能直接類名.屬性名或類名.方法名。
而@classmethod因為持有cls引數,可以來呼叫類的屬性,類的方法,例項化物件等,避免硬編碼。
class
dog(
object):
food =
"gutou"
age =
"1"def
__init__
(self, name)
: self.name = name
@classmethod
defeat
(self, age)
:#只能是類中的變數
# print(self.name)
print
(age)
print
(self.food)
@classmethod
defeat1
(self, age)
:# 只能是類中的變數
# print(self.name)
age =
"2" self.food =
"tang"
@staticmethod
defprint_1()
:print
(dog.food, dog.age)
d = dog(
"labuladuo"
)d.eat(dog.age)
#通過物件呼叫
dog.eat(dog.age)
#通過類呼叫
print
("-----1-----"
)d.eat1(dog.age)
dog.print_1(
)print
("--------2-------"
)dog.eat1(dog.age)
dog.print_1(
)
#1.
class
circle
:def
__init__
(self,radius)
:# 圓的半徑radius
self.radius=radius
@property
defarea
(self)
:return math.pi * self.radius**
2# 計算面積
@property
defperimeter
(self)
:return
2*math.pi*self.radius # 計算周長
c=circle(10)
print
(c.radius)
print
(c.area)
# 可以向訪問資料屬性一樣去訪問area,會觸發乙個函式的執行,動態計算出乙個值
print
(c.perimeter)
# 同上
'''輸出結果:
314.1592653589793
62.83185307179586
'''#2.
class
foo:
def__init__
(self,val)
: self.__name=val # 將所有的資料屬性都隱藏起來
@property
defname
(self)
:return self.__name # obj.name訪問的是self.__name(這也是真實值的存放位置)
@name.setter
defname
(self,value):if
notisinstance
(value,
str)
:#在設定值之前進行型別檢查
raise typeerror(
'%s must be str'
%value)
self.__name=value # 通過型別檢查後,將值value存放到真實的位置self.__name
@name.deleter
defname
(self)
:raise typeerror(
'can not delete'
)f = foo(
'egon'
)print
(f.name)
f.name =
'10'
# 可以賦值
print
(f.name)
# 輸出 10
f.name =
10# 丟擲異常'typeerror: 10 must be str'
del f.name # 丟擲異常'typeerror: can not delete'
Python 靜態方法,類方法,屬性方法
1.靜態方法 靜態方法 只是名義上歸類管理,實際上在靜態方法中訪問不了類和例項 class person object def init self name self.name name staticmethod 截斷類與函式關係,不能呼叫類變數 def eat print s is eating ...
Python的靜態方法 類方法 屬性方法和魔法方法
1 靜態方法 作用 靜態方法可以更好的組織 防止 變大後變得比較混亂。特性 靜態方法只是名義上歸類管理,實際上在靜態方法裡訪問不了類或則例項中的任何屬性 靜態方法使用場景 1 我們要寫乙個只在類中執行而不在例項中執行的方法.2 經常有一些跟類有關係的功能但在執行時又不需要例項和類參與的情況下需要用到...
Python中類的方法屬性與方法屬性的動態繫結
最近在 學習python 純粹是自己的興趣愛好,然而並沒有系統地看python 程式設計書籍,覺得上面描述過於繁瑣,在 找了一些學習的 發現廖雪峰老師的 上面的學習資源很不錯,而且言簡意賅,提取了一些 python python 的執行 缺點就是沒有系統的看 python 的書籍,不能及時的將知識的...