💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 类定义 ``` class ClassName: <statement-1> . . . <statement-N> ``` * 创建一个类之后,可以通过类名访问其属性 ## 类对象 类对象支持两种操作:属性引用和实例化。 属性引用使用和 Python 中所有的属性引用一样的标准语法:**obj.name**。 类对象创建后,类命名空间中所有的命名都是有效属性名。所以如果类定义是这样: ``` class MyClass: """一个简单的类实例""" i = 12345 def f(self): return 'hello world' # 实例化类 x = MyClass() # 访问类的属性和方法 print("MyClass 类的属性 i 为:", x.i) > print("MyClass 类的方法 f 输出为:", x.f()) ``` 类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用 ``` def __init__(self): self.data = [] ``` 类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。如下实例化类 MyClass,对应的 __init__() 方法就会被调用 * __init__() 方法可以有参数,参数通过 __init__() 传递到类的实例化操作上 * self代表类的实例,而非类 * 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。 ## 类的方法 * 在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self, 且为第一个参数,self 代表的是类的实例。 * ## 类的继承 ``` class DerivedClassName(BaseClassName): <statement-1> . . . <statement-N> ``` 子类(派生类 DerivedClassName)会继承父类(基类 BaseClassName)的属性和方法。 BaseClassName(实例中的基类名)必须与派生类定义在一个作用域内。除了类,还可以用表达式,基类定义在另一个模块中时这一点非常有用 ## 多继承 ``` class DerivedClassName(Base1, Base2, Base3): <statement-1> . . . <statement-N> ``` 注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索 即方法在子类中未找到时,从左到右查找父类中是否包含方法。 ## 方法重写 如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法 ``` class Parent: # 定义父类 def myMethod(self): print ('调用父类方法') class Child(Parent): # 定义子类 def myMethod(self): print ('调用子类方法') c = Child() # 子类实例 c.myMethod() # 子类调用重写方法 super(Child,c).myMethod() #用子类对象调用父类已被覆盖的方法 ``` super() 函数是用于调用父类(超类)的一个方法。 ## 类属性和方法 * __private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。 * __private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。