Python类的基本操作
- Python
- 19小时前
- 10热度
- 0评论
Python类的基本操作
- 以双下划线开头的变量或方法是私有变量/方法,除下面这个特殊
- 以xx形式定义的变量,可以被外部访问,称为特殊属性
- python不支持重载,如果写多个同名函数,则会以最后一个为准
Python类中的@classmethod、@staticmethod 装饰方法
- @classmethod,用来修饰类方法,可以在使用时候只与类交互,而不用实例化类后才能用
- @staticmethod,用来修饰静态方法,使用在有些与类相关函数,但不使用该类或该类的实例。如更改环境变量、修改其他类的属性等。修饰的方法是放在类外的函数,我们为了方便将他移动到了类里面,它对类的运行无影响。
- @property,将类方法转换为只读属性,即将类方法转变为类属性
二者最大区别是,classmethod必须传入类的对象作为第一个参数,staticmethod则不需要传递任何参数
cls 表示类,self 表示实例;
cls 类是在没创建实例之前就存在。
self 是你通过类实例化后的实例对象。
# class MyClass(AAA): 我要继承AAA类
class MyClass: # 不继承可以直接这样写
# 写在这里的只要引入这个包就会执行
classVar = "classVar" # 类变量
_classVar = "_classVar"
__classVar = "__classVar"
print("已初始化类变量")
# 只有创建类的对象时才会执行
# 实例属性优先级高于类属性
def __init__(self):
self.var = "var" # 成员变量
print("已初始化实例变量")
# 成员/实例方法:类必须初始化后才能使用
def func(self):
print("类变量: ", self.classVar) # 可以
print("成员变量: ", self.var) # 可以
# 类方法:不初始化类也能使用
@classmethod
def classFunc(cls):
print("类变量: ", cls.classVar) # 可以
# print("成员变量: ", cls.var1) # 无法打印成员变量,报错
# 静态方法:仅仅放在类里面而已, 不使用类的方法
@staticmethod
def staticFunc():
# print("类变量: ", cls.classVar) # 报错
print("静态方法")
# 将方法变为属性,一般可以通过该方法获取类的私有类变量/变量
# getPrivateClassVar不能修改
@property
def getPrivateClassVar(self):
return self.__classVar
print(MyClass.classVar) # 可直接访问
print(MyClass._classVar) # 仅约定私有变量,但可以访问
# print(MyClass.__classVar) # 访问报错
class1 = MyClass()
print(class1.getPrivateClassVar)
# class1.getPrivateClassVar = 5 # 试图通过property修改会报错类的*args, **kwargs
- *args: 把没有参数名的数据按顺序存为元组
- **kwargs:把有参数名的数据存为字典
def func(*args, **kwargs):
print(args, type(args))
print(kwargs,type(kwargs))
func("a","b","c",k1="aa",k2="bb",k3="cc")
# s
# ('a', 'a', 'c') <class 'tuple'>
# {'k1': 'aa', 'k2': 'bb', 'k3': 'cc'} <class 'dict'>类的继承
单继承
# Animal继承与object
class Animal(object):
def __init__(self,name,age):
self.name = name
self.age = age
def call(self):
print(self.name,"会叫")
class Cat(Animal):
def __init__(self,name,age,sex):
# 根据self去找Cat的父类,然后调用父类的init
super(Cat,self).__init__(name,age)
self.sex = sex
def call(self):
print(self.name,self.age,self.sex)
if __name__ == '__main__':
c = Cat('mew',2,'boy')
# 先找子类的call,找不到再找父类的call
c.call()多继承,如何判断?
找继承的第一个类,即从class C(B,A)可以得知继承的第一个类是B

可以参考本篇文章下载python