面向对象的成员
一.变量
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() # 报错 因为在外面访问不到

浙公网安备 33010602011771号