zoukankan      html  css  js  c++  java
  • python面向对象之成员

    成员
    在类中写的所有内容都是类的成员

    变量
    实例变量: 由对象去访问的变量

    复制代码
     1 class Person:
     2     def __init__(self,name,birth):
     3         self.name = name         # 实例变量,对象里的变量(对象.属性)
     4         self.birth = birth
     5 p = Person('bob','1900')
     6 print(p.name)
     7 print(p.birth)
     8 p.birth = 1937
     9 print(p.birth)
    10 结果
    11 bob
    12 1900
    13 1937
    复制代码

    类变量: 变量属于类,但是对象也可以访问

    复制代码
     1 class Person:
     2     country = '中国'
     3     def __init__(self,name,birth):
     4         self.name = name
     5         self.birth = birth
     6 p = Person('bob',1937)
     7 p2 = Person('jack',2000)
     8 print(p.country)
     9 print(p2.country)
    10 p.country = '法国'
    11 print(p.country)
    12 print(p2.country)
    13 Person.country = '美国'   # 类变量最好是使用类名来访问
    14 print(p.country)          # 类变量可以给对象使用
    15 print(p2.country)
    16 结果
    17 中国
    18 中国
    19 法国
    20 中国
    21 法国
    22 美国
    复制代码

    方法
    实例方法: 使用 对象.方法()
    特点: 在声明的时候,需要给出self,self必须放在第一个位置,在调用的时候,自动的会把对象传递给形参的self

    复制代码
     1 class Person:
     2     def chi(self):      #chi实例方法
     3         print('吃饭')
     4 在定义实例方法的时候,必须给出一个参数 self
     5 形参的第一个参数,自动的把对象给传递进来
     6     def he(self):   #self是当前类的对象
     7         print(self)
     8         print('喝水')
     9 p = Person()
    10 p.he()          #调用的时候不需要手动给出self
    11 print(p)
    12 结果
    13 <__main__.Person object at 0x000002289B6F72E8>
    14 喝水
    15 <__main__.Person object at 0x000002289B6F72E8>
    复制代码

    类方法 @classmethod : 类方法是属于类的
    特点: 在声明的时候需要给出一个能够接受类名的参数 cls,也必须放在参数的第一个,在调用的时候,自动得把xx对象的类传递给cls

    复制代码
     1 class Person:
     2     def chi(self):
     3         print('吃饭')
     4     @classmethod    #类方法
     5     def he(cls):    # 接收到的cls是类名
     6         print('喝水')
     7 p = Person()    #用对象访问
     8 p.he()          #在调用类方法的时候,默认的把类名传递给类方法
     9 Person.he()     # 类方法一般用类名去访问
    10 结果
    11 喝水
    12 喝水
    复制代码

    静态方法@staticmethod: 静态方法也是属于类的,静态方法就好比,我们在类中定义了一个函数,静态方法一般和类方法差不多,使用类名去访问

    复制代码
     1 class Person:
     2     @staticmethod   #静态方法
     3     def chi():
     4         print('吃饭')
     5 p = Person          #静态方法可以使用对象访问,也可以使用类名访问,但是一般推荐使用类名访问
     6 p.chi()
     7 Person.chi()        #推荐使用类名访问
     8 结果
     9 吃饭
    10 吃饭
    复制代码

    属性
    在方法上添加一个@property,可以把一个方法变成一个属性,但是这个属性不可以被赋值
    当某一个属性必须经过计算才能得到结果的时候用

    复制代码
     1 class Person:
     2     def __init__(self,name,birth):
     3         self.name = name
     4         self.birth = birth
     5 # 把一个方法更改成一个属性,每次拿属性的时候都会自动的去执行这个方法
     6 # 方法的返回值就是属性值
     7 # 年龄,应该是算出来的,而不是直接存储
     8     @property
     9     def age(self):      # 实例方法
    10         print('方法')
    11         return 2018 - self.birth
    12 p1 = Person('bob',2000)
    13 print(p1.age)    #看着像一个变量一样使用,实际上这里是调用的一个方法(方法不可修改)
    14 结果
    15 方法
    16 18
    复制代码

    私有
    所有以双下划线开头的方法,变量都是私有内容,外界无法访问,除非你主动暴露这些内容

    复制代码
     1 class Person:
     2     __he = '可乐'
     3     def __init__(self,name,mimi):
     4         self.name = name
     5         self.__mimi = mimi  # 私有内容,实例变量
     6     def shuo(self):
     7         print('这个秘密是%s'%self.__mimi)    #如果公开就能调用了
     8         print(Person.__he)  # 私有的类变量只能在类中调用
     9         return self.__mimi
    10     # 公开了__mimi和__he这个两个私有变量
    11     
    12     def __wan(self):        # 私有的实例方法
    13         print('找刘丽玩')
    14     @staticmethod
    15     def __xiao():
    16         print('刘丽特别爱笑')
    17     @classmethod
    18     def __xue(cls):
    19         print('学习')
    20 p = Person('bob','万物皆空')
    21 # print(Person.__he)    # 私有类变量只能在类里面调用(在外调用报错)
    22 # print(p.__mimi)       # 私有的类属性只能在类里面调用(在外调用报错)
    23 # Person.__xiao()       # 私有的类方法只能在类里面调用(在外调用报错)
    24 p.shuo()   
    25 结果
    26 这个秘密是万物皆空
    27 可乐
  • 相关阅读:
    S02_CH09_UART串口中断实验
    S02_CH08_ ZYNQ 定时器中断实验
    S02_CH07_ ZYNQ PL中断请求
    S02_CH06_XADC实验
    S02_CH05_UBOOT实验Enter a post title
    S02_CH04_User_IP实验Enter a post title
    S02_CH03_EMIO实验Enter a post title
    S02_CH02_MIO实验Enter a post title
    S02_CH01_Hello World实验
    bzoj4868 [Shoi2017]期末考试
  • 原文地址:https://www.cnblogs.com/selina1997/p/10157146.html
Copyright © 2011-2022 走看看