python class成员详解

1、类的成员--变量python

  在类中变量成员分为两类:实例变量(字段)和类变量(静态变量)函数

  (1)实例变量:每个实例都应该拥有本身的变量,实例变量是给对象用的。spa

  (2)类变量:类变量是属于类的,只有经过类名调用才能更改类变量的值。code

class Person:
    coutry="中国" #在此处申明类变量
    def __init__(self,name ,age): #构造方法,在此处声明实例化变量
        self.name=name  #实例变量
        self.age=age

# Person.coutry="大庆" #经过类 修改类变量

mt=Person("马化腾",18)
mt.company="腾讯" #添加实例变量
mt.coutry="大庆" #即便类变量中存在country,对象不能直接对类变量修改,只会在本身对象中添加实例化变量
print(mt.age) #18
print(mt.company)#腾旭
print(mt.coutry)    #对象.变量 :寻找的方法,首先如今对象的属性中寻找,若是找到直接,中止寻找,并返回,不然继续向类变量寻找
al=Person("曹操",135)
print(al.age) #135
print(al.coutry)#中国
# 类变量的修改只能经过类修改 

  

 

2、类的成员---方法对象

  一、成员方法(实例方法)blog

lass Cat:
    def chi(self):
        print("猫喜欢吃鱼")
c=Cat()
c.chi()#猫喜欢吃鱼

  二、静态方法:类里面定义一个普通的函数(与外部函数同样)继承

    格式:@staticmethod +函数定义的方法ip

ss Static( ):
    @staticmethod
    def chi():#静态方法,不须要传递self参数,与普通函数同样
        print("我是一个静态的吃吃")
s=Static()
s.chi() #我是一个静态的吃吃

  三、类方法:无论是对象仍是类访问该方法,接受到的值都是类it

    格式:@classmethod +函数定义的方法(cls)io

class Class():
    @classmethod
    def say(cls):#第一个位置自动产生一个cls,接受一个类
        print(cls)
        print("我是类方法,我接受的值是类")
c=Class()
c.say() #<class '__main__.Class'> 我是类方法,我接受的值是类
Class.say() #<class '__main__.Class'> 我是类方法,我接受的值是类

    ⾯试题: 类⽅法/静态⽅法和实例⽅法有什么区别?

类方法:通常只由类调用,不推荐用实例调用,有默认传递的参数cls,默认传递的参数是类;
实例方法:实例方法由实例对象调用,有默认传递的参数self,默认参数是对象自己;
静态方法:能够由类和实例对象调用,没有默认参数

 

 

3、类的成员--属性

  属性通常在__init__(self)中建立,可是有时候咱们的属性须要计算,这个时候属性就不能直接在___init__中声明,此实须要利用函数的属性化。

  函数属性化:把公式转换为属性

  格式:@property +函数定义的方法

etime #插入时间模块
class Person:
    def __init__(self,name,birthday,email):
        self.name=name
        self.birthday=birthday
        self.email=email
#   要求须要定义一个age属性
    @property #把方法转换为属性,对象属性的书写,self.age
    def age(self): #方法中只有一个参数self
        now_time = int(datetime.datetime.now().strftime("%Y"))#获取当前的年的数值:2018
        return now_time-int(self.birthday.strip().split("-")[0]) #2018-1014

c=Person("小鸡","2014-10-15","123a46@qq.com")
print(c.age) #c.age 获得年龄属性  结果:4

   总结;

    一、方法参数只有一个self;

    二、方法中须要书写@property;

    三、调用的时候,不须要带括号,直接当成对象的属性变量来用就能够;

    四、这种套路只能取值,不能设置值。

 

 

4、私有

  私有方法的表示方法:__方法 、__变量、__类

  在python中使用__做为方法或者变量的前缀,那么这个方法或者变量就i是一个私有的。

  一、私有变量

 Person:
def __init__(self,name,laopo,):
self.name=name
self.__laopo=laopo#私有变量,老婆是本身的别人不能用
def look(self):
print(self.__laopo)
r=Person("周杰伦","昆仑")
r.look() #经过内部函数访问 昆仑
print(r.__laopo)#type object 'Person' has no attribute '__laopo'

  二、私有方法

class Yue:
    def __yue(self):
        print("我要出去约约约")
    def chi(self):
        print("吃什么")
    def __play(self):
        print("玩什么")
r=Yue()
r.chi()
r.__yue() #'Yue' object has no attribute '__yue' 报错
r.__play  #'Yue' object has no attribute '__play' 报错

  三、私有类和私有静态方法再也不赘述了,与私有的其余的方法同样

  总结:

    一、私有方法不能被外部访问,只能经过内部访问;

    二、没法被继承。

相关文章
相关标签/搜索