python -- 面向對象-成員

一、成員
 
    在類中,你能寫的全部內容都是類的成員
 
二、變量
 
       一、實例變量:由對象去訪問的變量,通常使用是  對象 . 屬性
class Person:
    def __init__(self,name,gender,hobby):
        self.name = name    # 實例變量   對象裏的變量
        self.gender = gender
        self.hobby = hobby

s = Person('張三','','打籃球')

print(s.hobby)

s.hobby = '踢足球'

print(s.hobby)

二、類變量:變量屬於類,可是對象也能夠訪問 ide

class Person:
    country = '中國'

    def __init__(self,name,gender):
        self.name = name
        self.gender = gender

c = Person('Ann','')
b = Person('Bob','')

print(Person.country)
c.country = '大清'  # 大坑,沒有修改類變量

print(c.country)  # 類變量能夠給對象使用
print(b.country)
 
三、方法
 
    一、實例方法:對象直接訪問的方法叫實例方法(成員方法)   使用   對象.方法()
        特色:再申明的時候,須要給self,self必須放在第一個位置,在調用的時候,自動的會把對象傳給形參的self
class Computer:

    #實例方法(成員方法)
    def play(self):
        print('電腦能夠玩遊戲')

    # 在定義實例方法的時候,必須給出一個參數self
    # 形參的第一個參數,自動的把對象給傳遞進來

    def work(self):  # self是當前類的對象
        print(self)
        print('電腦能夠用來工做')

c = Computer()
c.work() # 調用的時候不須要手動的給出self
print(c)
View Code
 
    二、類方法(@classmathod):類方法是屬於類的
        特色:在申明的時候須要給出一個可以接受類名的參數,cls,也必須放在參數的第一個,在調用的時候,自動得把xx對象的類傳遞給cls
 
        類方法和靜態方法差很少,只不過類方法須要在參數列表中的第一個位置預留一個參數位置cls, 類方法在被調用的時候也不須要傳遞實例參數,系統會自動的把類傳遞給第一個參數。
class Person:
    # 實例方法
    def eat(self):
        print('吃遍山珍海味')

    @classmethod  # 裝飾器,此時這個方法是一個類方法
    def talk(cls):  # 此時接收到的cls是類名
        print('自言自語')

# # 用對象訪問
# s = Person()
# s.talk()  # 在調用類方法的時候,默認的把類名傳遞給類方法
# print(Person)

# 類方法通常用類名訪問
Person.talk() # 類方法
View Code
三、靜態方法(@staticmethod):靜態方法也是屬於類的,靜態方法就比如,咱們在類中定義了一個函數
           靜態方法通常跟類方法差很少,使用類名去訪問。
           靜態方法不須要咱們給方法傳遞self,也就是說,當出現一個方法不須要使用到成員變量的時候,就能夠選擇使用靜態方法。
class Quit:

    @staticmethod
    def meet():
        print('會議保持安靜')

# 靜態方法可使用對象訪問,也可使用類名訪問,可是通常推薦使用類名訪問
c = Quit()
c.meet()

# 推薦使用類名訪問
Quit.meet()
View Code
四、類的成員 - 屬性
 
class Person:

    __qie = 'beauty'

    def __init(self,name,secret):
        self.name = name
        self.__secret = secret  # 私有內容  實例變量

    def tell(self):
        print(f"你的祕密是{self.__secret}")
        print(Person.__qie) # 私有的類變量只能在類中調用
        return self.__secret

    def __dream(self): # 私有的實例方法
        print('個人夢想是..')

    @staticmethod
    def __think():
        print('當心思')

    @classmethod
    def  __work(cls):
        print('我的工做')


p =Person('zhangmeng','過去的生活')
# print(p.__secret)  # 私有的內容只能在類中調用
#
# p.tell()
# print(Person.__qie)

# p.__dream()
# Person.__work()
View Code

 

        在方法上添加一個@property,能夠把一個方法變成一個屬性,可是這個屬性不能夠被賦值
        當咱們某一個屬性必須通過計算才能獲得結果的時候。
class Person:
    def __init__(self,name,hobby,birth):
        self.name = name
        self.hobby = hobby
        self.birth = birth
    # 年齡應該是算出來的,而不是直接存儲

    @property # 把一個方法更改爲一個屬性,每次拿屬性的時候都會自動的去執行這個方法
            # 方法的返回值就是屬性值
    def age(self): # 實例方法
        print('個人年齡')
        return 2018 - self.birth

c = Person('zhangmeng','dance',1999)
# c.age
print(c.age)  # 看着像一個變量同樣使用,實際上這裏是調用的一個方法

# c.age = 26  # 不能夠,由於age是一個方法,不是一個變量
View Code
注意:
    一、方法參數只能有一個self
    二、方法上方要寫@property
    三、調用的時候,不須要寫括號,直接當成屬性變量來使用就能夠了
    四、這種套路只能取值,不能設置值
 
 
五、私有
 
        全部以雙下劃線開頭的方法,變量都是私有內容,
        私有的內容不能直接訪問,可是若是對方開闢了外界訪問的通道,那能夠經過這個公共的方法來獲取到私有的內容,這樣作的好處是,外界只能看,可是不能更改。
        對於私有的內容而言,子類是沒法繼承的。
class Person:

    __qie = 'beauty'

    def __init(self,name,secret):
        self.name = name
        self.__secret = secret  # 私有內容  實例變量

    def tell(self):
        print(f"你的祕密是{self.__secret}")
        print(Person.__qie) # 私有的類變量只能在類中調用
        return self.__secret

    def __dream(self): # 私有的實例方法
        print('個人夢想是..')

    @staticmethod
    def __think():
        print('當心思')

    @classmethod
    def  __work(cls):
        print('我的工做')


p =Person('zhangmeng','過去的生活')
# print(p.__secret)  # 私有的內容只能在類中調用
#
# p.tell()
# print(Person.__qie)

# p.__dream()
# Person.__work()
View Code
相關文章
相關標籤/搜索