• 13 类的成员


    一、类的尘缘

      

      在上⾯代码中__init__和method都属于类的成员方法.  又称为实例方法.  总之这样的东西 需要用对象来访问.  ⽽而上⽅的self.属性1 = 参数1 这个代码的含义是给对象设置属性信息. 含义是这个对象的xxx属性是xxxx. 这种东⻄⼜被称之为成员变量或者实例变量, 再或者被称之为字段. 都是一个意思. 

      1 . 的乘员之变量

    • 实例变量:每一个对象具体的属性,如人的名字,性别等。
    • 类的变量:一类事物同意拥有的东西,如我们的国籍等。
    class Car:
        country = '中国' #类变量
        def __init__(self,xinhao,price,color):
            self.xinhao = xinhao
            self.price = price
            self.color = color
    c1 = Car('奥迪','1000','red')
    print(Car.country)
    c1.country = '美国'#创建一个c1的country属性,并不会改变类变量
    print(c1.color)
    print(c1.country) #美国
    c2 = Car('tesla','11','bulue')
    print(c2.country) #中国
    Car.country = '广东' #只有通过类名才可以改变类变量
    实例变量和类变量及有个小坑

         注:关于那个坑,因为程序创建C1实例的时候将类变量的地址也存入了内存中,只能通过地址去访问而不能去改变。看似改变只不过是c1创建了一个属性而已。c2中类变量并没有改变。

      小结:实例变量, 给对象用的. 类变量, 多个对象共享的. 最好是⽤用类名来访问. 这样更加规范.

      2.类的成员之

        1. 成员方法(实例方法):对象直接访问的⽅法叫成员方法. 

        2. 静态方法:静态方法不需要我们给⽅法传递self.  也就是说. 当出现一个方法不需要使用到 成员变量的时候. 就可以选择使⽤静态方法.  静态方法需要我们在方法上面添加 一 个@staticmethod 使用类名直接进行访问和调用。

    @staticmethod
    def fare():   
         print("我的电脑⾮非常⽜牛B, 可以煎鸡蛋")
    Computer.fare()类名直接访问
    c.fare 最好不用对象访问以便区分静态方法的成员方法
    View Code

        3. 类方法: 类⽅方法和静态⽅方法差不多, 只不过类⽅方法需要在参数列列表中的第⼀一个位置预留留⼀一 个位置, 通常我们给第一个参数起名字叫cls. 类⽅方法在被调⽤用的时候也不需要传递实例例对象. 但是. 系统会⾃自动的把类传递给第⼀一个参数.  类⽅方法在编写的时候, 需要在类⽅方法上⾯面添 加@classmethod 

    class Computer:    
        def play(self):        
            print("我的电脑可以玩儿")    
    
    @staticmethod   
    def fare():        
        print("我的电脑⾮常牛B, 可以煎鸡蛋")    
    
    @classmethod    
    def cal(cls, a, b):        
        print(cls)        
        return a+b 
    print(Computer.cal(1, 2)) # 此时会⾃自动的把类名传递给类⽅方法的第⼀一个参数   
    View Code

      3.类的成员之属性

         定义:属性其实就是通过方法改造过来的一种变量的写法, 在方法上添加一个@property就可以了

    class Person:   
     def __init__(self):        
        pass    
    @property    
    def age(self):        
        return 1   
    p = Person() 
    age = p.age 
    print(age)
    View Code

        注:应⽤场景: 我们一般保存数据的时候, 不会保存⼀个人的年年龄. 因为随着时间的推移. 每个 人的年龄都时刻在改变着. 那如何保存更加完美呢? 很简单. 保存出生年月日. 然后⽤用程序来 计算,你当前的年龄. 实时的. 那这个时候就需要进行相应的计算了. 而计算属于一个功能. 当然要写方法里了. 但是对于年龄这个属性⽽言. 他应该是⼀个数值. 而不是动作. 所以python 就提供了这样一种机制. 通过方法来描述一个属性.     

          注意:         

            1. 方法参数只能有⼀个self       

            2. 方法上方要写@property       

            3. 调⽤的时候, 我们不需要写括号. 直接当成属性变量来用就可以了.         

            4. 这种套路只能取值. 不能设置值

    二 私有

       在python中, ⼀般是不提倡设置和使⽤私有信息的. 但有些场景, 我们不得不这么做. 比如, 在一个公司. 每个人的收入情况, 这种内容是绝对不能公开的. 还有, 你的老婆, 也是一个私有的. 只能你一个人使用. 别人不能碰. 碰了就炸锅了. 在python中使用__作为方法或者变量的前缀. 那么这个方法或者变量就是一个私有的. 

      1 私有变量

    class Person:    
    def __init__(self, laopo, mimi):       
        self.__laopo = laopo    # 私有的        
        self.__mimi = mimi
    alex = Person("wusir", "他俩搞基") 
    print(alex.__mimi) # 私有的. 谁都不不能碰
    双下划线设置私有变量
    class Person:    
        def __init__(self, laopo, mimi):        
            self.__laopo = laopo    # 私有的        
            self.__mimi = mimi    
        def gaosuni(self):        
            print("⼤大喇喇叭开始⼴广播了了")        
            return self.__mimi    # 私有的内容.在他⾃己那里, 他可以任意的进行使用    
    alex = Person("wusir", "他俩搞基") 
    mimi = alex.gaosuni()    # 通过⼀个非私有的⽅法, 访问到了了他的秘密. print(mimi)            
    间接访问私有变量

         注:记住, 私有的内容不能直接访问. 但是如果对方开辟了外界访问的通道(公共⽅方法). 那可以 通过这个公共的⽅法来获取到私有的内容. 这样做的好处是. 外界, 只能看, 但是改不了. 不单实例变量有私有的. 类变量(静态变量)都样拥有这样的属性: 

      2 私有方法

         私有方法, 顾名思义, 只能自己访问的方法.   

    class Person:    
        def __init__(self):       
             pass
        def __yue(self):        
            print("我要约会")    
        def job(self):        
            print("我要⼯工作") 
    p = Person() # p.__yue() # 报错 p.job()    
    View Code

    注  __yue是⼀个私有的⽅法. 只能在类中自己调用. 类外面不能访问.  job是一个成员⽅方法. 并且是一个开放的方法. 在类外界可以被访问到 同样的. 类中的私有方法也是相对而言的. 我们可以通过其他方法来访问到这样的方法. 

    所以还有类方法、静态方法、和成员方法类似的。

      

  • 相关阅读:
    ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
    ROS Learning-012 beginner_Tutorials (编程) 创建自定义的ROS消息和ROS服务
    电子模块 001 --- 遥杆 JoyStick
    ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)
    STM32 C++编程 002 GPIO类
    Python 网络爬虫 002 (入门) 爬取一个网站之前,要了解的知识
    STM32 C++编程 001 工程模板
    ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)
    Python 网络爬虫 001 (科普) 网络爬虫简介
    Python 黑客 --- 002 入门级 ZIP压缩文件口令暴力破解机
  • 原文地址:https://www.cnblogs.com/-0121/p/9926082.html
Copyright © 2020-2023  润新知