1. 程式人生 > >python 面向對象 公有屬性

python 面向對象 公有屬性

pre charm pychar .com one most In 本地 name

公有屬性定義 公有屬性也叫作類變量

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon 
= weapon self.life_value = life_value self.moneny = moneny self.__heart = normal # 私有屬性 def shot(self): # 類的方法,功能(動態屬性) print("shotting") # 定義一個方法用來對外訪問 def show_heart(self): return self.__heart def got_shot(self): print("on,%s got shoot...
" % self.name) def buy_gun(self,gun_name): print("%s just bought %s" %(self.name,gun_name)) self.weapon = gun_name b1 = role(mike,警察,AK47) b2 = role(mike,警犬,B13) print(b1.weapon) # AK47 打印的是成員屬性 # b2武器也是成員屬性 # 想讓 b1 b2 共享武器需要公有屬性 print(b1.nationality) # JP print
(b2.nationality) # JP

修改公有屬性

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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

b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)

print(b1.weapon)  # AK47  打印的是成員屬性
# b2武器也是成員屬性
# 想讓 b1 b2 共享武器需要公有屬性


b1.nationality = Thailand
print(b1.nationality)   # Thailand
print(b2.nationality)   # JP

更改類的公有屬性

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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

b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)

print(b1.weapon)  # AK47  打印的是成員屬性
# b2武器也是成員屬性
# 想讓 b1 b2 共享武器需要公有屬性


# 更改類的公有屬性
role.nationality = Thailand

# 兩個都改了
print(b1.nationality)   # Thailand
print(b2.nationality)   # Thailand

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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

b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)

print(b1.weapon)  # AK47  打印的是成員屬性
# b2武器也是成員屬性
# 想讓 b1 b2 共享武器需要公有屬性


# 更改類的公有屬性
role.nationality = Thailand

# 兩個都改了
print(b1.nationality)   # Thailand
print(b2.nationality)   # Thailand


print("-"*40)
b1.nationality = china
print(b1.nationality)
print(b2.nationality)


‘‘‘
AK47
Thailand
Thailand
----------------------------------------
china
Thailand
‘‘‘

還沒有實例化之前 就存在定義公有屬性 公有屬性就存在內存裏

公有屬性存在類的內存裏, 可以省內存 不用放在構造函數裏 每次實例化都保存在每個對象內存裏

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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



print(role.nationality)  # JP

# b1 = role(‘mike‘,‘警察‘,‘AK47‘)
# b2 = role(‘mike‘,‘警犬‘,‘B13‘)


# # 更改類的公有屬性
# role.nationality = ‘Thailand‘
#
# # 兩個都改了
# print(b1.nationality)   # Thailand
# print(b2.nationality)   # Thailand
#
#
# print("-"*40)
# b1.nationality = ‘china‘
# print(b1.nationality)
# print(b2.nationality)

技術分享圖片

技術分享圖片

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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




b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)



# 兩個都改了
print(b1.nationality)
print(b2.nationality)   

# 更改類的公有屬性
role.nationality = china
print(b1.nationality, b2.nationality)

‘‘‘
JP
JP
china china
‘‘‘

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性

    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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




b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)



# 兩個都改了
print(b1.nationality)
print(b2.nationality)

# 更改類的公有屬性
role.nationality = china
print(b1.nationality, b2.nationality)

print("-"*40)
b1.nationality = "USA"
print(b1.nationality)
print(b2.nationality)

‘‘‘
JP
JP
china china
----------------------------------------
USA
china
‘‘‘

在本地創建一個新的 r1.nationality = CN 與Role 沒有半點關系

技術分享圖片

函數 方法也是公有屬性

class role(): # 傳參數

    # 公有屬性都在這裏定義
    # 在類裏直接定義的屬性即是公有屬性
    nationality = JP

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 構造函數
        # 實例化過程中做一些類的初始化工作
        # 成員屬性
        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = normal   # 私有屬性


    # 這裏的函數 方法 也是公有屬性
    def shot(self):  # 類的方法,功能(動態屬性)
        print("shotting")

    # 定義一個方法用來對外訪問
    def show_heart(self):
        return self.__heart

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

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




b1 = role(mike,警察,AK47)
b2 = role(mike,警犬,B13)


def shot2(self):
    print("my shot",self.name)


b1.shot = shot2

b1.shot(b1)  # 需要手動傳參數
b2.shot()    # 用原來對象方法

‘‘‘
my shot mike
shotting
‘‘‘

python 公有屬性可以用類訪問,也可以用對象訪問

公有屬性只能用去訪問

class po:

    country = "中國"

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


s1 = po("河南")

# python 公有屬性可以用類訪問,也可以用對象訪問
print(po.country)
print(s1.country)

‘‘‘
中國
中國
‘‘‘

私有公有屬性 對外不能訪問

class Foo(object):

    __name = "mike"


print(Foo.__name)



‘‘‘
Traceback (most recent call last):
  File "C:/Users/Administrator.QH-20170325TNQR/PycharmProjects/SSSSS/SS/day7/S13 面向對象/私有公有屬性 .py", line 11, in <module>
    print(Foo.__name)
AttributeError: type object ‘Foo‘ has no attribute ‘__name‘
‘‘‘

在內部普通方法可以訪問

class Foo(object):

    __name = "mike"

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

    def f1(self):
        print(Foo.__name)

obj = Foo("jack")
obj.f1()

# mike

使用靜態方法 不創建對象

class Foo(object):

    __name = "mike"

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

    @staticmethod
    def f1():
        print(Foo.__name)

Foo.f1()

# mike

python 面向對象 公有屬性