1类的定义
1.1类的组成
属性 | 具体属性 | 特点 |
方法 | 构造方法 | 构造方法用于构造实例对象,__init__,传入参数第一个必须是self |
方法 | 成员方法 | 成员方法定义在类中,第一个参数必须是self,方法前加__ |
方法 | 私有方法 | 私有方法不能由外部调用,第一个参数必须是self |
方法 | 静态方法 | 静态方法不依赖于实例对象,同时也不能调用类方法和类属性,用@staticmethod修饰 |
方法 | 类方法 | 类方法不依赖实例对象,但是必须传入参数cls,代表类本身,因此可以调用类方法和变量,用classmethod修饰 |
属性 | 成员属性 | 在构造方法中定义的属性,可由实例对象调用 |
属性 | 私有属性 | 在构造方法中定义的属性,只能由类对象内部调用,属性名前加__ |
属性 | 类属性 | 在类中定义的属性,不依赖实例对象调用 |
1.2类的定义格式
定义格式如下:
lass ClassName:
clsname=“”#定义类变量
@staticmethod#定义静态方法,静态方法不依托实例对象存在,但是也不能调用成员变量和成员方法
def staticname():
@classmethod#定义类方法,类方法不依托实例对象存在,同时类变量需要传入cls参数(类本身参数),因此可以调用和修改类变量
def classmethodname(cls):
def__init__(self,arg1,arg2):#定义构造方法,需要传入固定self参数(实例对象本身)#####__init__千万不能写成int
self.arg1=arg1 #定义成员属性
self.__arg2=arg2 #定义私有属性,外部不可访问和调用,只能通过类成员方法访问
def set_arg2(self): #定义成员方法,可以修改私有属性
def __method(self) #定义私有方法,外部不可调用,只能通过成员方法调用
实例演示如下:
>>> class Dog:
... classname="狗类"
... @staticmethod
... def state():
... print("这是一个狗类")
... @classmethod
... def favorite(cls):
... print(cls.classname+":狗喜欢吃骨头")
... def __init__(self,name,age):
... self.name=name
... self.__age=age
... def set_age(self,age):
... if not isinstance(age,int):
... print("年龄必须是整数!")
... elif age<=0:
... print("年龄必须大于0!")
... else:
... self.__age=age
... def show(self):
... self.play()
... def play(self):
... print("汪汪汪")
...
>>> Dog.classname
'狗类'
>>> Dog.favorite()
狗类:狗喜欢吃骨头
>>> dog.name
'旺财'
>>> dog.set_age(5)
>>> dog.show()
汪汪汪
>>>
2类的继承和多态
2.1类的继承
继承语法如下:
class SubClass(BaseClass1,BaseClass2):
语法块
注意:
1.继承直接在类名后面加括号、带上父类名称;
2.python中可以继承多个类;
3.子类不能继承父类的私有方法,也不能调用;
2.2类的多态
子类对父类的同名方法进行复写。