• Python 类的特性讲解


    类的特性讲解

    类的特性

    #定义一个类, class是定义类的语法,Role是类名,
    (object)是新式类的写法,必须这样    写,以后再讲为什么
    class Role(object):    
    
    #初始化函数,在生成一个角色时要    初始化的一些属性就填写在这里    
        def __init__(self,name,role,weapon,life_value=100,money=15000):
            
    #__init__中的第一个参数self,和这里的self都 是什么意思? 看下面解释
    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...,I got shot...")
    
        def buy_gun(self,gun_name):
            print("%s just bought %s" %(self.name,gun_name))
            self.weapon = gun_name #将weapon定义到gun_name
    
    r1 = Role('Alex','police','AK47') #生成一个角色
    r2 = Role('Jack','terrorist','B22')  #生成一个角色
    
    r1.shot()
    r2.buy_gun("B46")
    print(r2.weapon)

    类-->实例化--->实例对象

    __init__构造函数

    self.name = name #属性,成员变量,字段

    def sayhi() #方法,动态属性

     

    方法介绍

    def sayhi()方法是公有的,对象会将内存下的数据访问类内存

    中的数据,不会产生在r1的内存中。

    1.方法模块转化私有的方法

    class Role(object):
    
    nationality = "JP"
    
    def __init__(self,name,role,weapon,):
    
    self.name = name
    
    self.role = role
    
    self.weapon = weapon
    
    def shot(self):
    
    print("%s is shooting..."%self.name)
    
    
    def shot(self):
    
    print("%s run my own shot method"%self.name)
    
    r1.shot()
    
    r1.shot = shot #替换为全局变量的shot,
    
    r1.shot(r1) #全局变量需要加上对象名
    
    r2.shot()
    
    #Alex is shooting...
    
    #Alex run my own shot method
    
    #Jack is shooting...

    公有属性

    成员属性

    class Role(object):
        def __init__(self,name,role,weapon,life_value=100,money=15000):
            self.name = name 
    #注: self.name = name 不是公有属性,则是对象的成员属性。

    公有属性

    class Role(object):
        nationality = "JP"
    #注:在类里定义的属性nationality = "JP",是公有属性

    更改类的公有属性

    class Role(object):
        nationality = "JP"
        def __init__(self,name,role,weapon,):
            self.name = name
            self.role = role
            self.weapon = weapon
            self.__heart = "Normal"
    r1 = Role('Alex','police','AK47')    #生成一个角色
    r2 = Role('Jack','terrorist','B22')  #生成一个角色
    
    #对象r1单个修改公有属性
    # r1.nationality = "US"
    # print(r1.nationality)
    # print(r2.nationality)
    #US
    #JP
    
    
    #全局修改公有属性
    # Role.nationality = "China"
    # print(r1.nationality)
    # print(r2.nationality)
    #China
    #China

    原理

    对象实例化后,获取到公有属性,全局属性,r1如果修改了单个共有

    属性,则会将命名为r1内存下创建改公有属性变量,再次获取时会优

    先访问r1内存下的公有属性,则是局部变量。(列图)

     

    私有属性

    self.__private_attr_name = value #只能内部访问,外部不可访问。

    1.对外部提供只读访问接口。

    def get_heart(self):
    
      reture self.__heart

    2.强制访问私有属性。

    r1._Role(r1对象所属类名)__heart (属性值)
  • 相关阅读:
    Javascript闭包的一些研究
    pytorchvision安装问题
    CUDA 基础
    语音识别入门推荐文献【转】
    【e2e】espnet框架安装问题集锦
    维特比算法与beam search
    kaldi识别问题集锦
    语音识别-重要开源数据
    git提交失败总结
    钟南山病后反思: 寿命长短, 不取决于衰老和疾病【转】
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7806008.html
Copyright © 2020-2023  润新知