python 面向对象 公有属性

 公有属性定义  公有属性也叫作类变量

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

猜你喜欢

转载自www.cnblogs.com/mingerlcm/p/8409870.html