python-類的方法與類的成員


preface

include:

  1. @classmethod
  2. @staticmethod
  3. @property
  4. 私有屬性
  5. 類的成員
#!/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解釋器來執行,所以,
析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM