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是一个成员⽅方法. 并且是一个开放的方法. 在类外界可以被访问到 同样的. 类中的私有方法也是相对而言的. 我们可以通过其他方法来访问到这样的方法. 

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

  

原文地址:https://www.cnblogs.com/-0121/p/9926082.html