面向对象的成员

一.变量

1.实例变量

  实例里的变量,由对象去访问的变量

2.类的变量

  类里的变量,这个变量属于类,但是对象也可以访问.最好用类名访问

class Person:
    country = "大清"    # 类的变量

    def __init__(self, name, gender):
        self.name = name       # 实例变量 对象里的变量
        self.gender = gender


Person.country = "大名"
# Person.gender = "男"
p = Person("小明", "未知")
p2 = Person("小小", "两性")

# p.country = "新中国"
print(p.country)
print(p2.country)  # 类的变量可以给对象使用
print(Person.country)   # 类的变量最好使用类名来访问
# print(dir(Person)) 

二.方法

1.实例方法

  实例方法就是属于对象的方法,需要实例化后访问.

2.类方法(@classmethod)

  类方法属于类的,在声明的时候需要给出一个能接收类名的cls,和self效果一样

3.静态方法(@staticmethod)

  静态方法也是属于类的,静态方法就好比我们在类里定义了一个函数. 使用类名去访问

class Computer:

    def play(self):  # 这就是实例方法
        print("电脑可以扫雷")

    @classmethod   # 装饰器 ,此时这个方法是一个类的方法
    def chat(cls):  # 此时接收到的cls是类名
        print("电脑可以聊天")

    @staticmethod   # 此时这是一个 静态方法
    def listen():
        print("电脑可以听听音乐")

c = Computer()
c.chat()     # 在调用类方法的时候 默认的把类名传递给类方法
# 类的东西可以看成是全局的东西
Computer.chat()  # 最好是谁的东西谁去用

Computer.listen()   # 推荐使用类名访问  

三.属性

  在方法上添加一个@property .可以把一个方法编程一个属性.但是这个属性不能更改 也就是不能赋值

  当我们需要一个经过计算才能得到结果的时候用,必须用return返回结果

class Person:

    def __init__(self,name,gender ,birth):
        self.name = name
        self.gender = gender
        # self.age = 2018 - birth
        self.birth = birth
    # 需要算出来的属性  用property
    @property  # 把一个方法更改成一个属性,每次拿属性的时候都会执行这个方法
               # 方法的返回值就是属性
    def age(self):
        return 2018 - self.birth

p = Person("小明","未知",2000)

print(p.age)  # 看着像一个变量一样使用 其实是调用了一个方法 不能赋值

四.私有

  所有以双下划线开头不以双下划线结尾的方法,变量都是私有内容.在类的外边无法访问,除非在类中曝光.

class Person:

    __qie = "潘潘"   # 类变量的私有

    def __init__(self,name,mimi):
        self.name = name
        self.__mimi = mimi   # 实例变量的私有

    def gaosu(self):
        print(f"{self.__mimi}")   # 私有内容只能在class内访问到
        print(Person.__qie)

    def __yue(self):     # 实例方法的私有
        print("走 一起看电影")

    @classmethod
    def __chi(cls):         # 类的方法的私有
        print("一起吃饭")

    @staticmethod
    def __he():            # 静态方法的私有
        print("一起喝")


p = Person("五二","和嫂子")

p.gaosu()

p.yue()   # 报错   因为在外面访问不到
原文地址:https://www.cnblogs.com/q767498226/p/10140308.html