preface
include:
- @classmethod
- @staticmethod
- @property
- 私有屬性
- 類的成員
#!/usr/bin/env python
class animal(object):
name='1990'
def __init__(self,name):
self.name=name
#加了兩個下划線后的變量名,此時變為了私有屬性,也就是私有變量
self.__num='private'
def talk(self):
print("%s are talking"%self.name)
#類方法,不能夠訪問實例變量,把walk方法變成了類方法,可以直接類名.方法名調用,但是要注意的是walk里
# 面的代碼塊的變量或者其他的對象都應該是類可以訪問的。
@classmethod
def walk(self):
#由於添加了類方法的裝飾器,所以這里的%s只能用類屬性(animal.name,也叫類變量)去賦值給%s,
print("\t\t%s are talking"%self.name)
#靜態方法,不再傳self參數進去。所以不能夠訪問類變量以及實例變量,如果添加了self,那么就要在調用的時候把實例名傳進去
@staticmethod
def habit():
print("%s's habbit : walking"%animal.name)
@property #把方法變成屬性,那么調用的時候可以不用加括號(),一般是為了隱藏該方法
def runing(self):
print("%s is running"%self.name)
def r_private(self):
return self.__num
@property
def total_players(self):
return self.__num
#這樣可以修改添加了@property里面的值
@total_players.setter
def total_players(self,num):
self.num=num
print("total players:",self.num)
animal.walk()
d=animal('ljf')
d.walk()
d.habit()
d.runing
d.r_private() #咱們訪問私有變量一般都是寫個方法,通過方法返回私有變量
print(d.__num) #下面的直接加兩個下划線來訪問私有屬性是錯誤的方法
d.__num='ahahh' #通過下面的賦值的方法,等於新建了一個__num的變量。這個和私有變量__num是兩碼事
print(d.__num)
print(d._animal__num) #強制訪問私有變量,實例名._類名__私有變量名
print(d.total_players)
問如何去訪問私有屬性,我們一般是在類里面設定一個方法,例子:
class a(object):
......省略一萬字
def access_private(self):
return self.__private
b=a()
b.access_private() #如果要用比較暴力的方法去訪問的話,那么就只能像下面這樣操作
b._a__private
類的成員
class foo(object):
"""
this class was test
"""
name='ljf'
age='123'
def __init__(self):
self.tt='durex'
def f1(self):
print('ssssss')
def __call__(self, *args, **kwargs):
print("use call method")
a=foo()
__doc__
打印類的注釋信息
print(a.__doc__)
dict 打印類里面的類變量,下面:
- 實例.__dict__是打印實例的變量。
- 類.__dict__是打印類或對象中的所有成員(所有變量)。
print(a.__dict__)
print(foo.__dict__)
__call__
這個的話是在類實例化后的對象加個括號出發,如x=class(),x()這樣在實例化之后就加個()能夠觸發
a()
===============================================================
__init__()
是構造方法,在實例化的時候就會觸發執行
__module__
表示當前操作的對象在哪個模塊里面__class__
表示當前操作的對象的類是什么
__del__
析構方法,當對象在內存中被釋放時,自動觸發執行。注:此方法一般無須定義,因為Python是一門高級語言,
程序員在使用時無需關心內存的分配和釋放,因為此工作都是交給Python解釋器來執行,所以,
析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。