首頁 > 後端開發 > Python教學 > 類別的簡介和屬性介紹

類別的簡介和屬性介紹

巴扎黑
發布: 2017-07-21 14:14:24
原創
1406 人瀏覽過

一、概述​​

1.定義類別(class Dog(object))--> 實例化(d = Dog())---> 實例物件( d)

2. __init__() 建構子

3. self.name = name  類別的屬性、成員變數

4. def say_hi()   類別的方法、動態屬性

二、存取類別的屬性

class Role(object):
    def __init__(self, name, role, weapon, life_value=100, money=15000):
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.money = money

    def shot(self):
        print("%s is shooting..." % self.name)

    def got_shot(self):
        print("ah...,%s got shot..." % self.name)

    def buy_gun(self, gun_name):
        print("%s just bought %s" % (self.name,gun_name))


r1 = Role('Alex', 'police', 'AK47')  # 生成一个角色
r2 = Role('Jack', 'terrorist', 'B22')   # 生成一个角色
登入後複製

  

  2.1 存取類別的屬性與方法

  我們用實例物件.屬性/方法來存取

r1.shot()    #  调用shot 方法
r2.buy_gun('B13')  # 调用 buy_gun的方法并传参
print(r1.role)   # 打印类的属性

# 输出

Alex is shooting...
Jack just bought B13
police
登入後複製

 

  2.1 修改物件的屬性

  在上例中我們為r2這個角色更換了武器,即B22 --> B13。但實際上我們調用r2這個角色的武器屬性是,會發現他的武器沒有改變:

r2.buy_gun('B13')
print(r2.weapon)

# 输出
Jack just bought B13
B22       # 可以发现武器依然是 B22
登入後複製
  其實我們可以在購買武器是直接改變物件的屬性:

def buy_gun(self, gun_name):
      print("%s just bought %s" % (self.name, gun_name))
      self.weapon = gun_name    # 在方法内改变属性



r2.buy_gun('B13')
print(r2.weapon)

#输出
Jack just bought B13
B13    # 可以发现武器已经改变
登入後複製

  

三、私有屬性

##  

3.1、定義私有屬性

   類類別的屬性一旦定義成私有屬性,就不能被外部呼叫和隨意修改。私有屬性只能在類別是內部使用。

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.__address = address   # 定义一个私有属性

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person('Bigberg', 'Doctor', '8833421', 'hz')
print(p1.name)
print(p1.__address)   # 访问私有属性

# 输出

Bigberg
  File "G:/python/untitled/study6/类的私有属性.py", line 17, in <module>
    print(p1.__address)
AttributeError: &#39;Person&#39; object has no attribute &#39;__address&#39;
登入後複製
  運行的結果是存取屬性name是可以通過的,但是直接存取私有屬性 self.__address 報錯了。但是如果透過其他的方法,還是可以存取的到的。

 

  
3.2、get的方法存取私有屬性

  外部不能直接存取私有屬性,但是在類別的內部可以訪問,所以我們可以定義一個方法來取得私有屬性。

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.__address = address

    def get_private(self):
        return self.__address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person(&#39;Bigberg&#39;, &#39;Doctor&#39;, &#39;8833421&#39;, &#39;hz&#39;)
res = p1.get_private()
print(res)

# 输出
hz
登入後複製
  

  
3.3 強制存取私有屬性

  我們也可以透過一種方法來強制存取私有屬性,甚至修改私有屬性的值。方法:物件名._類別名稱__屬性名。

class Person(object):

    def __init__(self, name, job, phone, address):
        self.name = name
        self.job = job
        self.phone = phone
        self.__address = address

    def get_private(self):
        return self.__address

    def sayhi(self):
        print("hell,%s" % self.name)

p1 = Person(&#39;Bigberg&#39;, &#39;Doctor&#39;, &#39;8833421&#39;, &#39;hz&#39;)

print(p1._Person__address)   # 访问私有属性

print("----change----")
p1._Person__address = &#39;BJ&#39;    # 修改私有属性
print(p1._Person__address)

#输出
hz
----change----
BJ
登入後複製

 

類別是簡化和最佳化應用程式的重要工具。

1.繼承性:子類別沿用父類別特徵的能力。體現並擴充了物件導向程式設計方法的共享性,使得同類型物件共享資料與程式碼,提高了程式的複用性。父類是可以進一步定義衍生新類的類,子類是以其他類為起點,透過更具體的特徵定義所建立的新類。 2.多態性:一些關聯的類別包含同名的方法程序,但方法程序的內容可以不同。呼叫哪一個在執行時會根據物件的類別來決定,同樣的 訊息被不同的物件接收時可導致不同的行動。 3.抽象性:提取一個類別或物件與眾不同的特徵,而不對該類別或物件其他資訊進行處理。

四、總結

1、定義私有屬性:self.__private_attr_name = private_attr_name

##2、強制存取私有屬性:物件名稱._類別名稱__屬性名稱(d._dog__sex)#############3、對外提供唯讀介面存取:########## ##    def get_sex(self):#############      return self.__sex######### ##### ##### ##### ##### ###

以上是類別的簡介和屬性介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板