標籤:log 編程 color 修改 import 物件導向 get 靜態屬性 closed
property 內建裝飾器函數 只在物件導向中使用
from math import piclass Circle: def __init__(self, r): self.r = r @property # 將類似屬性卻需要操作得到的一些方法偽裝成對象屬性 def perimeter(self): return 2 * pi * self.r @property def area(self): return pi * self.r ** 2circle = Circle(5)print(circle.perimeter) # 調用方法和操作屬性相同 本質上還是方法print(circle.area)
property 提供私人屬性的查看,修改和刪除
class Person: def __init__(self, name): self.__name = name @property def name(self): return self.__name @name.setter # 修改 通過賦值來修改 def name(self, new_name): self.__name = new_name @name.deleter def name(self): del self.__namep = Person(‘zxc‘)print(p.name) # zxcp.name = ‘zxf‘print(p.name) # zxfdel p.name # 這裡的del只是對應@name.deleter,主要看@name.deleter下面的方法執行了什麼# print(p.name) # 報錯 顯示沒有name屬性
classmethod和staticmethod
class Person: __key = ‘人類‘ def __init__(self, name): self.__name = name @property def name(self): return self.__name @classmethod # 將一個方法變成類中的方法,使這個方法可以直接被類調用而不用依託對象 def change_key(cls, new_key): cls.__key = new_keyprint(Person._Person__key) # 人類Person.change_key(‘human‘)print(Person._Person__key) # human# 當這個方法的操作只涉及靜態屬性的時候 就應該使用classmethod來裝飾這個方法
classmethod
class Login: def __init__(self,name,password): self.name = name self.pwd = password def login(self): pass @staticmethod # 裝飾一個完全跟類和對象沒有關係的靜態方法,通過類調用 def get_usr_pwd(): # 靜態方法 usr = input(‘使用者名稱 :‘) pwd = input(‘密碼 :‘) Login(usr, pwd)# 一般用在完全物件導向編程的時候
staticmethod
python物件導向進階