class MyClass:
i = 12345
def f(self):
return 'hello world'
x = MyClass()
print(x.i)
print(x.f())
init
# python的类的构造方法是__init__(),在类实例化时会自动调用。
class Tool:
def __init__(self, x, y):
self.a = x
self.b = y
t = Tool(1, 2)
print(t.a) # 1
print(t.b) # 2
self
python类方法必须包含参数 self, 且为第一个参数,按照惯例叫 self,当然,随便叫,self代表类的实例,而非类。
class Test:
def prt(self):
print(self)
print(self.__class__)
t = Test()
t.prt()
# <__main__.Test instance at 0x100771878>
# __main__.Test
# 可见self 代表的是类的实例,代表当前对象的地址,而 self.class 才是类。
继承
class SonClass(FaClass):
...
子类会继承父类的属性和方法。如果父类是定义在另一模块中那么可以这样写:
import a
class SonClass(a.FaClass):
pass
s = SonClass(); s.f()
子类也可以覆写继承自父类的方法,直接def同名方法即可。
多继承
class SonClass(FaClass1, FaClass2, FaClass3)
需要注意的是父类存在重名方法,而python的搜索顺序是现在子类找,再顺序找FaClass1, FaClass2, FaClass3直到找到。
方法重写
class Parent: # 定义父类
def myMethod(self):
print ('调用父类方法')
class Child(Parent): # 定义子类
def myMethod(self):
print ('调用子类方法')
c = Child()
c.myMethod() # 调用子类方法
# 非要用子类对象c调用父类原方法咋搞?:
super(Child,c).myMethod() # 调用父类方法
类的私有属性和方法
__开头即可,例如__name,__get()。只能在类的内部调用 ,不能在类的外部调用
类的特殊方法
__init__() : 构造函数,在生成对象时调用
__del__() : 析构函数,释放对象时使用
__repr__() : 打印,转换
__setitem__() : 按照索引赋值
__getitem__(): 按照索引获取值
__len__(): 获得长度
__cmp__(): 比较运算
__call__(): 函数调用
__add__(): 加运算
__sub__(): 减运算
__mul__(): 乘运算
__truediv__(): 除运算
__mod__(): 求余运算
__pow__(): 乘方
运算符重载
附:python里可以两个对象相+-*/等运算,需要书写__add__()等方法,例如:
class Vector:
def __init__(self, a, b):
self.a = a
self.b = b
def __str__(self): # 水太深了,还是没搞懂为什么少了这个函数就报错<__main__.Vector object at 0x000001DC91C6CDD0>
return 'Vector (%d, %d)' % (self.a, self.b)
def __add__(self,other):
return Vector(self.a + other.a, self.b + other.b)
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)
- THE END -
最后修改:2023年10月16日
共有 0 条评论