版权声明:火炉大印—曲奇喵 https://blog.csdn.net/afsya/article/details/84377048
变量
类的变量
class A:
num = 1
a = A()
# 1
a.num
# 1
A.num
# 修改类的变量值
A.num = 2
# 2
a.num
# 修改对象的变量值
a.num = 3
2
A.num
# 给对象添加属性
a.age = 10
# 没有
A.age
实例的变量
class A:
def __init__(self):
self.num = 1
a = A()
# 没有
A.num
# 1
a.num
函数
类的函数
class A:
num = 1
def func():
print(num)
a = A()
# 报错,因为会自动把 a 作为参数,与函数参数不匹配
a.func()
# 报错,在 func() 中找不到 num
A.func()
class A:
num = 1
@classmethod
def func(cls):
print(cls.num)
a = A()
# 1
a.func()
# 1
A.func()
class A:
num = 1
@staticmethod
def func():
print(num)
# 报错,在 func() 中找不到 num
A.func()
class A:
num = 1
@staticmethod
def func():
a = 2
print(a)
a = A()
b = A()
# 2
a.func()
# 2
b.func()
参数 | 访问类变量 | 访问实例变量 | |
---|---|---|---|
@classmethod | cls | 可以 | 不可以 |
@staticmethod | 不需要 | 不可以 | 不可以 |
实例的函数
class A:
def func(self,x,y):
return x + y;
a = A()
# 30
a.func(10,20)
# 没有
A.func(10,20)
继承
class A:
@classmethod
def func(cls):
print('A')
class A1(A):
pass
# A
A1.func()
# (<class 'object'>,)
print(A.__bases__)
# (<class '__main__.A'>,)
print(A1.__bases__)
class A:
def __init__(self):
self.num = 1
print(self.num)
class A1(A):
pass
# 1
a = A1()
class A:
def __init__(self):
self.num = 1
print(self.num)
class A1(A):
def __init__(self):
self.num = 2
print(self.num)
def myfunc():
print('this is my func')
# 2
a = A1()
多继承
class A:
def __init__(self):
print('A')
class B:
def __init__(self):
print('B')
class C(A,B):
pass
# A
a = C()
多态
- 目的:根据数据的类型执行不同的操作
- 实现:子类重写父类的方法
class A:
def func(self):
print('A')
class B(A):
def func(self):
print('B')
a = A()
b = B()
# A
a.func()
# B
b.func()
# True
isinstance(a,A)
isinstance(b,B)
isinstance(b,A)
# False
isinstance(a,B)
# 多态
def myfunc(obj):
obj.func()
# A
myfunc(a)
# B
myfunc(b)
内建函数
class A:
def __call__(self):
print('A')
a = A()
# A
a()
class A:
# 构造函数(分配空间)
def __new__(self):
print('new')
return super(A,self).__new__(self)
# 数据初始化
def __init__(self):
print('init')
# 销毁前(清理工作)
def __del__(self):
print('del')
# new
# init
a = A()
# del
del a
- 限制属性
class A:
__slots__ = ('name','age')
a = A()
a.name = 'abc'
a.age = 10
# 报错,属性范围中没有 school
a.schoole = 'haha'