目录
类定义:
class MyClass:
def prt(self):
print(self)
print(self.__class__)
t = MyClass()
t.prt()
class Complex:
# self代表类的实例,而非类,代表当前对象地址,而self.class则是指向类,self并非关键字,换成其他字符也是可以的
# 类的方法与普通函数只有一个区别,他们必须有一个额外的第一参数名称,惯例是self
def __init__(self, real, imag):
self.r = real
self.i = imag
x = Complex(10, 6)
print(x.r, x.i)
输出:
<__main__.MyClass object at 0x0000020083E25EB8>
<class '__main__.MyClass'>
10 6
类单继承:
# 类的继承: class DerivedClassName(BaseClassName1):
# 类的继承: class DerivedClassName(modname.BaseClassName):,基类在另外模块
class people:
# 定义基本属性
name = ''
age = 0
# 定义私有属性,类外无法直接访问
__weight = 0
# 定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说:我 %d 岁了!" % (self.name, self.age))
# 单继承示例
class student(people):
grade = 0
def __init__(self,n,a,w,g):
people.__init__(self, n, a, w)
self.grade = g
def speak(self):
print("%s 说:我 %d 岁了!在读 %d 年级" % (self.name, self.age, self.grade))
p = people('ken', 15, 66)
p.speak()
s = student('ken', 13, 46, 3)
s.speak()
输出:
ken 说:我 15 岁了!
ken 说:我 13 岁了!在读 3 年级
多继承:
# 多继承
class speaker:
topic = ''
name = ''
def __init__(self,n,t):
self.topic = t
self.name = n
def speak(self):
print("我叫 %s,我是一个演说家,我演讲的主题是 %s" % (self.name, self.topic))
class sample(student, speaker):
a = ''
def __init__(self, n,a,w,g,t):
student.__init__(self, n, a, w, g)
speaker.__init__(self, n, t)
def speak(self):
print("我叫 %s,我是一个演说家,我演讲的主题是 %s!" % (self.name, self.topic))
def __privat(self):
print("I like to swim!")
test = sample('Tim', 16, 55, 12, 'Python')
test.speak()
输出:
我叫 Tim,我是一个演说家,我演讲的主题是 Python!
调用方法:
class Parent: # 定义父类
def myMethod(self):
print('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print('调用子类方法')
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
super(Child, c).myMethod() # 用子类对象调用父类已被覆盖的方法
输出:
调用子类方法
调用父类方法
类的专有方法:
- __init__ : 构造函数,在生成对象时调用
- __del__ : 析构函数,释放对象时使用
- __repr__ : 打印,转换
- __setitem__ : 按照索引赋值
- __getitem__: 按照索引获取值
- __len__: 获得长度
- __cmp__: 比较运算
- __call__: 函数调用
- __add__: 加运算
- __sub__: 减运算
- __mul__: 乘运算
- __truediv__: 除运算
- __mod__: 求余运算
- __pow__: 乘方
运算符重载:
# 运算符重载
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self):
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self, other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(3, 9)
v2 = Vector(5, 10)
print(v1 + v2)
输出:
Vector (8, 19)