Python入门 - 面向对象

常见概念 

 

类和对象

class MyClass:
    num = 0
    s = ""

    def __init__(self):  # 构造函数
        pass

    def print_info(self):
        print("num is: %s, str is: %s" %(self.num, self.s))
        pass


a = MyClass()
a.num = 88
a.s = "hello"
a.print_info()  # num is: 88, str is: hello

带参数构造函数

class MyClass:
    def __init__(self, num: int, s: str):  # 带参数构造函数
        self.num = num
        self.s = s

    def print_info(self):
        print("num is: %s, str is: %s" %(self.num, self.s))


a = MyClass(88, "hello")
a.print_info()  # num is: 88, str is: hello

a.num = 80
a.s = "world"
a.print_info()  # num is: 80, str is: world

 

访问控制

python中只支持public和private,没有protected, internal

class MyClass:
    __num = 0
    _s = ""

    def __init__(self, num: int):
        self.__num = num

    def print_info(self):
        print("num is: %s, str is: %s" % (self.__num, self._s))

    def __print_info(self):
        print("num is: %s, str is: %s" % (self.__num, self._s))


a = MyClass(88)
a._s = "hello"
a.print_info()  # num is: 88, str is: hello
# a.__num = 30  # 私有变量无法访问, 会抛异常
# a.print_info()  # 私有成员函数无法访问, 会抛异常

 

继承

class Parent:
    def __init__(self, n: int):
        self.num = n


class Child(Parent):
    def __init__(self, num: int):
        Parent.__init__(self, num)  # 调用父类构造函数, 或者super(num).__init__(); 或者super(Child, self, num).__init__()
        self.num2 = 0

    def print_info(self):
        print("Child: num: %s, num2: %s" % (self.num, self.num2))


a = Child(80)
a.num2 = 30
a.print_info()  # Child: num: 80, num2: 30

super

class Parent:
    num = 0

    def do_add(self):
        self.num += 1  # add num


class Child(Parent):
    num2 = 0

    def do_add(self):
        super().do_add()  # 也可以这样写: super(Child, self).do_add()
        self.num2 += 2


a = Child()
a.do_add()
print("num:%s, num2:%s" % (a.num, a.num2))  # num:1, num2:2

override覆盖,多态

class Parent:
    num = 0

    def test_override(self):
        print("Parent: num: %s" % self.num)


class Child(Parent):
    num2 = 0

    def test_override(self):
        print("Child: num: %s, num1: %s" % (self.num, self.num2))


a = Parent()
a.num = 1
a.test_override()   # Parent: num: 1

a = Child()
a.num = 20
a.num2 = 30
a.test_override()  # Child: num: 20, num1: 30

super(Child, a).test_override()  # Parent: num: 20, 子对象调用父类函数

 

静态变量

class MyClass:
    num = 0

    @staticmethod
    def do_add(a: int, b: int):
        # self.num = a + b  # 无法访问成员变量
        c = a + b
        print(c)


MyClass.do_add(1, 2)  # c

 

不支持的特性

静态变量

接口(纯虚类)

抽象类(虚基类)

抽象函数(纯虚函数)

 

posted @ 2023-07-21 01:15  yanghui01  阅读(11)  评论(0)    收藏  举报