python面向对象的方法类型,继承等
析构函数
class My:
def __init__(self):
print('构造函数,类在实例化的时候执行')
def __del__(self):
print('析构函数,实例被销毁的时候执行')
def say(self):
print('say')
m=My()
m.say()
私有
类方法
1 不实例化,可以直接用类调用
2 可以使用类变量,cls.xxx
3 实例化也可以通过self.xx调用类方法
4 类方法是不能用实例方法和实例变量的
class My:
name='holly'
#类方法
@classmethod#装饰器,不改变原来的函数,给函数增加新功能
def eat(cls):
print(cls.name)
print('吃饭')
My.eat()
m=My()
m.eat()
实例方法
类里面正常定义的方法都叫实例方法(self)
静态方法:
就是一个普通的方法,只是放在了类里面而已
不需要实例化直接用类名可以调用
用不了实例方法,用不了实例变量
用不了类方法,类变量
class My:
def __init__(self):
print('构造函数,类在实例化的时候执行')
#实例化方法
def cry(self):
print('cry')
# 静态方法
@staticmethod
def study():
print('study hard')
My.study()
属性方法
看起来像变量的函数
1 实例方法
2不能有入参
3 用它的时候直接把他当作变量就可以了,不用加括号调用
4 他是获取函数的返回值
class My:
def __init__(self):
print('构造函数,类在实例化的时候执行')
@property
def red_pag(self):
return 100
m=My()
print(m.red_pag)
面向对象:继承 封装 多态(java中有,python中没有这个概念)
继承:简化代码,减少重复代码,在父类方法的基础上修改,就是在子类中先调用一下父类的方法
class Restaurant():
def __init__(self,restaurant_name,cuisine_type):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
def describe(self):
print('name '+self.restaurant_name,"cuisine's type"+self.cuisine_type)
def open(self):
print('xxxx')
class Flavors():
def flavors(self,*info):
self.info=info
# print(self.info)
class IcecreamStand(Restaurant):#继承
def __init__(self,restaurant_name,cuisine_type):
super().__init__(restaurant_name,cuisine_type)#调用父类(超类)init方法
self.flavors=Flavors()#将Flavors实例用作IcecreamStand类的属性
ice=IcecreamStand('bing','ice')
ice.flavors.flavors('apple','pear','peach')
# res=Restaurant('dongbeicai','luandun')
# res.describe()