property装饰器
我们可以使用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改
class roo():
print("123")
def __init__(self,name):
self.—_name=name
@property
def name(self):
print("456")
return self._name
ro=roo("Pythons")
print(ro.name)
加上property装饰器之后,在调用方法的时候可以不用写括号。
setter装饰器
class roo():
print("123")
def __init__(self,name):
self._name=name
@property
def name(self):
print("456")
return self._name
@name.setter
def name(self,na):
print("789")
self._name=na
ro=roo("巩")
print(ro.name)
ro.name="旺仔"
print(ro.name)
setter装饰器必须在property装饰器后边
property装饰器会把成员函数x转换为getter,相当于做了x = property(); x = x.getter(x_get)
在运行时可以不用写括号。
x.setter装饰器会把成员函数x转换为setter,相当于做了x = x.setter(x_set).
可以看到我们实现了通过属性x来对私有变量_x进行操作。
在调用时,可以直接用等号赋值。
继承
• 继承是面向对象三大特性之一
• 通过继承我们可以使一个类获取到其他类中的属性和方法
• 在定义类时,可以在类名后面的括号中指定当前类的父类(超类、基类)
• 继承提高了类的复用性。让类与类之间产生了关系。有了这个关系,才有了多态的特性
所有类的父类都是object
class fa(): #定义一个父类
print("123")
class so(fa): #定义一个子类,在括号里写上fa,表示父类是fa
print("456")
s=so
如果子类和父类的属性或方法名称相同,当子类调用时,先从子类中查找
super的用法
super()用来查找父类中的方法
class animal(): #定义一个父类
print("123")
def one(self):
print("这是父类的一个方法")
class dog(animal): #定义一个子类,在括号里写上fa,表示父类是fa
print("456")
def two(self):
print("运行two")
super().one()
do=dog()
do.two()
运行two
这是父类的一个方法
多重继承
class a():
def x(self):
print("12300")
class b():
def x(self):
print("79847448")
class c(a,b):
pass
cc=c()
cc.x()
类方法和静态方法
class room():
@classmethod
def one(cls):
print("这是类方法")
@staticmethod
def one():
print("这是静态方法")
静态方法和这个类没有关系,不需要指定任何参数,实例对象和类对象都可以调用静态方法,金泰方法就相当于一个功能函数,存放在类中