欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

python面向对象(一)

程序员文章站 2022-04-27 16:53:35
1.定义类下面定义了一个简单的People类:class People: pass# 构建对象people = People()类代表了具有相同特征的一类数据的抽象,可以根据类生成相应的对象,以此来对应客观世界存在的事物。2.在类中定义方法类中定义的方法,代表了特定对象所具有的行为,类中定义的方法一般第一个接受的参数是self,代表了其本身,和java中的this类似。定义__init__方法init方法是类的初始化方法,当通过类构建了对象之后就会调用,通常用于对象构建之后的初始...

1.定义类

下面定义了一个简单的People类:

class People:
    pass
# 构建对象
people = People()

类代表了具有相同特征的一类数据的抽象,可以根据类生成相应的对象,以此来对应客观世界存在的事物。

2.在类中定义方法

类中定义的方法,代表了特定对象所具有的行为,类中定义的方法一般第一个接受的参数是self,代表了其本身,和java中的this类似。

定义__init__方法

init方法是类的初始化方法,当通过类构建了对象之后就会调用,通常用于对象构建之后的初始化或赋值。如下是对people类的完善:

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age
p = People("小明", 20)
# p.name = "小明"

可以看到方法前后各有两个连接的下划线,在 Python中,这样的名称意味着在类以外的其他位置不要直接调用,基本上都会有个函数来调用这类方法,就init而言,如果创建 People实例时就会调用这个初始化方法。

定义__str__方法

str方法当使用print输出对象时会调用,或者使用str()方法传入对象,也会调用该方法。__str__方法获取描述字符串并返回。

class People:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return "我叫{name},今年{age}岁。".format(name=self.name, age=self.age)
p = People("小明", 20)
print(p)
# 输出为:我叫小明,今年20岁。

从__init__、__str __、的例子中可知,在 Python中,__xx__这类有着特定意义的方法名称还真不少,之后还会看到更多。

定义操作方法

操作方法也就是一般的方法,可以在对象中用.的形式直接调用,会有对应的返回值,这些方法是用户自己定义的对类的行为的扩充。

class People:
    # 省略init
    def eat(self):
        print("吃饭")
p = People("小明", 20)
p.eat()
# 输出为:小明吃饭

3.定义内部属性

如上我们定义的people类中,在init方法内定义了两个属性name和age,当然因为python在定义变量不用事先声明,因此也可以在构建对象之后,再在对象上通过. 的形式增加属性,但不建议这样做,最好还是在类定义的时候定义好属性,然后在实际运用时按类中定义的属性来运用。

完成get与set

在Java语言中,定义类的时候,会将一些属性定义为私有的,避免了从外部直接访问对象中的变量(属性),这样更安全一些;相应的,在类的内部提供get和set方法,外部能够调用这两个方法来完成对属性值的获取和赋值。
Python中没有私有变量的概念,但也能通过一些特定的方法实现类似Java中的get和set功能。

  1. 对于类中的属性,可以在命名时在其开头增加__使其变成内部属性,外部就无法直接获取该属性了,但这并不是私有的,Python并没有完全限制从外部取属性,在属性头部加上__之后,属性名称会自动转换成__className_属性名的形式,外部是可以通过这中属性名访问的。
  2. 对于内部属性,可以设置其“get”方法来获取其值,具体操作就是定义一个方法,其作用就是返回内部属性的值,然后可以通过调用该方法来使用;为了让使用更方便,我们也可以在该方法上加上@property的注解,那么之后就可以使用类似属性获取的方式调用该方法了(看起来就像是类的一个属性)。
  3. 对于内部属性的赋值,也是通过方式实现的,定义一个“set”方法,其作用就是给内部属性赋值,外部可以直接调用该方法为内部属性赋值;同时可以使用@xx.setter注解让该方法调用更加简单(比如使用=就可以调用该方法)。
    一个示例:
class People:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age

    # get方法,获取内部属性
    @property
    def name(self):
        return self.__name

    # set方法,给内部属性赋值
    @name.setter
    def name(self, set_name):
        self.__name = set_name


p = People("小明", 20)
p.name = "小华"  # 通过=直接调用方法
p.name  # 通过属性的样式调用get方法

注意:使用注解之后就不能再直接按照函数那样调用原方法了,同时可以看到get和set方法是重名的,python不支持方法重载?,因此有重名方法时,近的会将远的覆盖,这里使用了注解之后可以使用重名的方法,相当于给方法重新命名了。
同时可以看到,现在获取属性和给属性赋值都比较方便了。

本文地址:https://blog.csdn.net/Chengjiayi2/article/details/107314425