面向对象编程
类
继承:多继承
类中所有的__开头的方法都是内置的来自于父类
定义类的语法
class类名(父类….)
#定义变量和方法
方法:
实例方法:只能通过实例调用,实例方法第一个参数只能实例本身的引用
类方法:定义类方法要使用装饰器@classmethod,定义的第一个参数只能只能是类对象的引用,可以通过类或者实例直接调用
静态方法:定义静态方法要使用装饰器@staticmethod,没有默认必须参数,可以通过类或者实例直接调用
方法:依赖定义,依赖调用
A
def foo()
pass
A().foo()
class person:
def __init__(self,first_name,last_name):
self.__first_name=first_name
self.__last_name=last_name
def show(self,s): #this show(s){}
print(self.__first_name)
print(self.__last_name)
print(self.full_name,s) #print(propterty(full_name),s)
@property
def full_name(self):
return self.__first_name+'.'+self.__last_name
@full_name.setter
def full_name(self,full_name):
self.__first_name=full_name[:full_name.index(".")]
self.__last_name=full_name[full_name.index(".")+1:]
p=person("wang","wu")
p.show("haha")
print(p.full_name)
p.full_name="li.si
p.show("heihei")
实例方法实例:
class Myclass:
def foo(self):
print(id(self))
a = Myclass() #创建本身
print(id(a))
a.foo()
类方法实例:
class Myclass:
def foo(self):
print(id(self))
a = Myclass() #创建本身
b = Myclass() #有创建了一个新的实例
print(id(a))
a.foo()
Myclass.foo() 这是错误的,不能被调用,因为foo()是实例方法
静态方法实例:
class Myclass:
def foo(self):
print(id(self))
@classmethod
# def foo2(self):
# print(id(self))
def foo2(cls):
print(id(cls))
@staticmethod
def foo3():
print('foo3')
a = Myclass() #创建本身
b = Myclass() #有创建了一个新的实例
print(id(a))
a.foo()
print(id(Myclass))
Myclass.foo2()
a.foo2()
a.foo()
Myclass.foo3()
私有的类方法
__private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用
在类的内部调用slef.__private_methods
类的专有方法:
_ init _ 构造函数,在生成对象时调用
_ del_ 析构函数,释放对象时使用
_ repr_ 打印,转换
_ setitem_按照索引赋值
_ getitem_按照索引获取值
_ len_获得长度
_ cmp_比较运算
_ call_函数调用
_ add_加运算
_ sub_减运算
_ mul_乘运算
_ div_除运算
_ mod_求余运算
_ pow_称方