iOS开发人员如何学习Python编程16-面向对象编程2

171 阅读3分钟

这是我参与11月更文挑战的16天,活动详情查看:2021最后一次更文挑战

私有属性与私有方法

在以上的学习中,我们了解到定义在__init__()构造方法初始化对象的属性是可以在类的外部访问到。那在实际开发中,对象的某些属性或者方法,可能只希望在对象的内部使用,这时,我们就可以使用:

  • 私有属性
  • 私有方法

私有属性

私有属性:

  • 就是对象不希望公开的属性。

定义方式:在属性名前面增加两个下划线(例如:__name)。

那如果有需求一定要在类的外部访问到对象的私有属性时,我们可以使用如下步骤:

  • 可以通过类的内部的方法访问私有属性;
  • 通过类的内部方法将私有属性返回出去;
  • 在类的外部调用该方法并且接收就可。
class Person:
    def __init__(self):
        self.name = "肉丝"
        self.__age = 20     # 私有属性定义

    def test(self):
        # print(self.__age) # 在类的内部 可以访问 私有属性
        return self.__age

rose = Person()
rose_age = rose.test()
print(rose_age,'test')      # 20 test

私有方法

私有方法:

  • 就是对象不希望公开的方法。

定义方式:在方法名前面增加两个下划线(例如:__test)。

⚠️注意:python中,并没有真正意义上的私有,只有伪私有。当我们在访问时,以对象._类名__私有属性名称即可访问,私有方法同。

class Person:
    def __init__(self):
        self.name = "肉丝"
        self.__age = 20     # 私有属性定义

rose = Person()
print(rose._Person__age)    # 20

成员

类的成员可分为:

  • 字段
  • 方法
  • 属性

字段又主要可以分为:

  • 普通(实例)字段
  • 静态(类)字段

普通字段(实例属性)

普通字段属于对象,保存在对象中,只能通过对象访问:

  • 定义self.字段名称
  • 访问self.字段名称 或 对象.字段名称。 定义一个省份类,打印输出班级每位同学所在的国家与省份:
class Province(object):
    def __init__(self,country,name):
        self.country = country
        self.name = name

    def print_info(self):
        print(self.country,self.name)


hunan = Province("中国","湖南")
shandong = Province("中国","山东")
hunan.print_info()
shandong.print_info()

但是这样实现,会有相应的问题。比如说,普通字段保存在对象中,也就是说,当创建一个对象时,就会重新创建self.country以及self.name字段。

当存对象的字段值相同时,仍然使用普通字段便会造成我们内存的浪费。

静态字段(类属性)

静态字段属于类,保存在类中。在创建时,仅创建一份,并且所有对象都共享静态字段。执行时可以是类访问也可以是对象访问:

  • 定义:直接在类中定义;
  • 访问类名.字段名称 或 self.字段名称 或 对象.字段名称

优化代码:

class Province(object):
    country = "中国"    # 静态字段 类属性
    def __init__(self,name):
        self.name = name    # 普通字段

    def print_info(self):
        print(Province.country,self.name)# 静态字段 通过类名访问


hunan = Province("湖南")
shandong = Province("山东")
hunan.print_info()
shandong.print_info()

在实际开发中,如果字段的值是固定的,不随对象的改变而改变。那就使用静态字段(类属性),这样有利于节省内存的消耗。而如果字段的值随对象的改变而改变,就使用普通字段(实例属性)。