Python的類屬性,實例屬性,類方法,實例方法,靜態(tài)方法

什么是類對象,什么是實例對象
類對象: 類名就是類對象
實例對象:類創(chuàng)建的對象

類屬性,實例屬性
類屬性: 就是類所擁有的屬性,它被所有的類對象所共有,在內(nèi)存中只有一個副本,類似于c++和Java中的靜態(tài)成員變量.對于公有的類屬性,類對象和實例對象都可以訪問類屬性.

# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/6 14:07'

# 類屬性
class Person(object):
    name = 'Tom' # 公有的類屬性
    __age = 28   # 私有的類屬性

p = Person()
print(p.name) # 實例對象調(diào)用類屬性
print(Person.name) # 類對象調(diào)用類屬性
# print(p.__age) # 錯誤 不能通過類實例直接訪問私有的類屬性
# print(Person.__age) #錯誤 不能通過類對象直接訪問私有的類屬性

實例屬性:實例屬性是創(chuàng)建完實例之后,再加的屬性,一般__init__()方法中屬性就是實例屬性

# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/6 14:12'
class Person(object):
    name = 'Tom'  # 實例屬性

p = Person()
p.age = 18

print(p.name,p.age)
# print(Person.age) # 錯誤,實例屬性只能由實例調(diào)用,類對象不能調(diào)用

print(p.name)
print(Person.name)

p.name = 'Jack'
print(p.name,Person.name)  # 這里打印 Jack Tom 而不是 Jack Jack
# 不能通過實例對象,修改類屬性,它只會去創(chuàng)建一個實例屬性,并不會改變類屬性的值.

實例方法,類方法,靜態(tài)方法

實例方法:
定義: 第一個參數(shù)必須是實例對象,一般用self來代替,通過它來傳遞實例的屬性和方法(也可以傳遞類的屬性和方法)
調(diào)用:只能由實例來調(diào)用

類方法:
定義:使用裝飾器@classmethod,第一個參數(shù)必須是類對象,該參數(shù)名一般約定為cls,通過它來傳遞類屬性和方法(不能傳遞實例對象和方法)
調(diào)用: 實例對象和類對象都可以調(diào)用

靜態(tài)方法:
定義:使用裝飾器你@staticmethod,參數(shù)沒有要求,不需要self,cls.但是方法中不能使用類或?qū)嵗娜魏螌傩院头椒?就是一個普通的函數(shù)放到了類中

調(diào)用: 實例對象和類對象都可以調(diào)用

# encoding:utf-8
__author__ = 'Fioman'
__time__ = '2019/3/6 14:21'
class Foo(object):
    # 實例方法
    def instance_method(self):
        print("這是類{}的實例方法,只能被實例對象調(diào)用".format(Foo))

    @classmethod
    def class_method(cls):
        print('這是類方法')

    @staticmethod
    def static_method():
        print('這是靜態(tài)方法')

foo = Foo()
foo.instance_method()
foo.class_method()
foo.static_method()

print('下面的方法只能通過實例來調(diào)用')
foo.instance_method()
# Foo.instance_method() 錯誤:類對象不能調(diào)用實例方法

Foo.class_method()
Foo.static_method()

說明:
實例方法只能由實例對象調(diào)用,而類方法和靜態(tài)方法實例對象和類對象都可以調(diào)用.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容