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 可乐
  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/selina1997/p/10157146.html
Copyright © 2011-2022 走看看