一、类
类(Class)是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。额…还是举例说明吧
class human: # 定义一个类叫human
name = "someone" # 类属性name
age = 20; # 类属性age
def say(self): # 类方法,所有的类方法都至少有一个参数self
print("hello")
def think(self,a=1,b=2):
print(a+b)
human1 = human() # 实例化human类,得到对象human1
print(human1.name) # 访问对象的name属性
human1.say() # 调用对象的say()方法
human1.think(a=2,b=3) # 调用对象的think()方法,并且传入参数
类里有一个__init__()方法(构造方法),此方法由两个下划线开头和结尾,它会在实例化类的时候自动执行,无需手动调用,所以一般可以用它完成一些初始化工作。上面的代码可以改成下面的
class human: # 定义一个类
def __init__(self,name="someone",age=20): # 此方法自动执行,用于初始化
self.name = name # 类属性name
self.age = age; # 类属性age
def say(self): # 类方法,所有的类方法都至少有一个参数self
print("hello")
def think(self,a=1,b=2):
print(a+b)
human1 = human("pan",30) # 实例化human类,得到对象human1
print(human1.name) # 访问对象的name属性
human1.say() # 调用对象的say()方法
human1.think(a=2,b=3) # 调用对象的think()方法,并且传入参数
我们需要注意几点
1.参数
类里所有的方法都至少有一个参数self(或者this),其他的与普通方法无区别
2.专有方法
除了__init__方法,还有其他一些以双下划线开头和结尾的方法,都属于专有方法,大概有
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
3.私有属性和私有方法
在一个类里定义属性或者方法的时候,若以双下划线开头,声明是私有属性或方法,不能在类的外部被使用或直接访问
二、继承
可以用A类继承于B类,这样B类所具有的属性和方法A类也有,比如说student类继承于human类,则human的name、age、say()等内容student类不用自己定义就有了,而且还能重写父类的方法
class human: # 定义一个类
def __init__(self, name="someone", age=20):
self.name = name # 类属性name
self.age = age # 类属性age
def say(self): # 类方法,所有的类方法都至少有一个参数self
print("hello")
def think(self,a=1,b=2):
print(a+b)
# human1 = human("pan",30) # 实例化human类,得到对象human1
# print(human1.name) # 访问对象的name属性
# human1.say() # 调用对象的say()方法
# human1.think(a=2,b=3) # 调用对象的think()方法,并且传入参数
class student(human):
def __init__(self, school="sxu", major="chem"): # 初始化类student
super().__init__("pan", 25) # 调用父类human的初始化方法
self.school = school
self.major = major
def think(self,a=1,b=2): # 重写think()方法,父类用加法,这里用乘法
print(a*b)
stu = student() # 实例化类得到对象stu
print(stu.name) # stu也有父类的name属性
print(stu.school)
print(stu.major)
stu.major = "python" # 修改major属性
print(stu.major)
stu.think(2, 3)