python面向对象,python小白学习过程

75 阅读3分钟

python中的类定义方法

python中的面向对象有三大特征: ① :封装 ②:继承 ③:多态

我们把现实生活中的实物封装为一个类,这个实物发出动作我们把它封装为一个方法,例如人是一个类,人具有身高、年龄等属性,人会跑步,那么跑步就是一个方法,而继承可以比作:教师是一个类,教师有工号和年龄,但是教师也属于人这个类,我们称教师为人的子类,下面介绍一些关于类定义的基本语法

基本语法:

class A(object):
    # 定义类在实例化后具有的属性,一般我们用__init__方法来初始化实例
    def __init__(self):  # self是一个参数,这个self指向实例化后的对象,括号内还可以添加其他参数
        self.a = 0
        self.b = 0
    # 定义实例化后实例拥有的方法:
    def func(self):
        print('我是A类的一员')
# 实例化一个类
a = A()
# self就是指向a的
# 在A类之外也可以调用a的属性,但是不建议这么做,面向对象强调封装性
print(a.b)    # 输出结果 0
# 类外调用func方法
a.func()   # 输出结果  我是A类的一员

运行结果图:

Snipaste_2023-07-12_22-08-47.png

定义一个有参数的初始化函数:

举例:

class Person(object):  
# 定义类在实例化后具有的属性,一般我们用__init__方法来初始化实例  
    def __init__(self, name, age): # self是一个参数,这个self指向实例化后的对象,括号内还可以添加其他参数  
        self.name = name  
        self.age = age  
  
    def func_1(self):  
        print(f'我今年{self.age}岁了')  
  
  
# 初始化一个p对象  
p = Person('tom', 30)  
# 输出p的年龄  
p.func_1()

由此案例我们得知:我们在尽量避免类外调用实例化属性的同时,若想要调用实例化属性,我们可以用实例化对象的函数去调用实例化属性。

定义私有属性:

还是这个案例,现在的name和age属性都是公有属性,可以在类外进行访问修改的,使用p.name = 'jnney'就可以将之修改,显然这种情况我们不希望发生,于是我们可以将其定义为私有属性,格式稍作修改,在name和age前面添加两条下划线,如下所示:

class Person(object):  
# 定义类在实例化后具有的属性,一般我们用__init__方法来初始化实例  
    def __init__(self, name, age): # self是一个参数,这个self指向实例化后的对象,括号内还可以添加其他参数  
        self.__name = name  
        self.__age = age  
  
    def func_1(self):  
        print(f'我今年{self.__age}岁了')  
  
  
# 初始化一个p对象  
p = Person('tom', 30)  
# 输出p的年龄  
p.func_1()

这样一来,私有属性不允许类外访问,就不容易被修改,想要修改只能通过调用类内部的公有方法。

对于属性是如此,公有函数和私有函数的定义同理,在函数名前加上双下划线即可,私有属性和函数不可以在类外调用,想要调用只能通过类内的公有方法实现访问或是修改。

拓展:几种魔术方法:

①:__init__方法,实现对类对象的初始化

②:__str__方法,实现对类对象打印时输出想要输出的内容

③:__dict__方法,将类对象转化为字典形式

④:__del__方法,一个类对象的析构方法

简单以图片介绍:

①:

Snipaste_2023-07-12_22-08-47.png

②:若没有__str__打印出来的p就是p对象的地址

Snipaste_2023-07-12_22-44-07.png

③:

image.png

④:

此方法在类销毁时会自动调用,我们可以手写一个来测试一下,

image.png

关于类的实例化和属性初始化便介绍到这里,后续会随之更新继承和多态介绍。