Python的类

11 阅读2分钟

类的声明格式如下:

class 类名称:
    成员变量1
    成员变量2

    def __init__(self, 参数列表):
        成员变量1 赋值
        成员变量2 赋值

    def 成员方法(self, 参数列表):
        成员方法体

    # 内置方法__str__ , 类似于Java的toString方法
    # 内置方法__lt__ , 只能对比对象之间的大于小于,不能对比等于
    # 内置方法__le__ , 可以对比对象之间的大于等于或者小于等于
    # 内置方法__eq__ , 对比对象之间的等于

对象 = 类名称()

类的构造函数__init__

def __init__(self, xxx, xxx):
    self.xxx = xxx
    self.xxx = xxx

类内置的方法

  • "__str__"(类似于Java的toString这种)
def __str__(self):
    return f'对象Student:name={self.name}, age={self.age}'
  • "lt"(只能对比大于小于,不能对比等于)
  • "le"(可以对比大于等于或者小于等于)
  • "eq"(对比等于)

类的私有方法

以双下划线开头的函数,私有方法不能被实例调用

def __private_method(self):
    print('从外部你调用不到我')

类的多继承

使用(xxx, yyy)这种写法

class CollegeStudents(Person, Student):
    pass  # 仅仅是占位,没啥意义

类的复写

直接在子类中定义和父类一样的函数即可复写

调用父类的成员变量和方法

  • 父类名.成员变量或者方法
  • super().成员变量或者方法

类声明示例如下:

# 人类
class Person:
    gender = None

    def __init__(self, gender):
        self.gender = gender

    def set_gender(self):
        self.gender = '女'
        print(self.gender)
# 学生
class Student:
    name = None
    age = None
    __weight = None  # 私有变量

    # 构造函数 __init__
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 类似于Java的toString方法
    def __str__(self):
        return f'对象Student:name={self.name}, age={self.age}'

    # 只能对比大于小于,不能对比等于
    def __lt__(self, other):
        return self.age < other.age

    # 可以对比大于等于或者小于等于
    def __le__(self, other):
        return self.age < other.age

    # 对比等于
    def __eq__(self, other):
        return self.age == other.age

    def get_weight(self):
        print(self.__weight)

    def set_weight(self, weight):
        self.__weight = weight

    # 私有方法不能被对象实例调用
    def __private_method(self):
        print('从外部你调用不到我')

    def say_hi(self):
        print(f'hi! my name is {self.name}')
# 多继承的子类
class CollegeStudents(Person, Student):
    pass  # 仅仅是占位,没啥意义

使用示例:

stu1 = Student('刘亦菲', 18)
stu2 = Student('高圆圆', 19)
print(stu1 == stu2)

stu1.set_weight(100)
stu1.get_weight()

# 子类声明
cs = CollegeStudents('女', '刘德华', 80)
cs.get_weight()