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

Python —类的私有属性、公有属性、私有方法、公有方法

程序员文章站 2024-01-20 22:32:04
...

类的私有属性、公有属性、私有方法、公有方法

类的公有属性
public_attrs:能在类的外部被使用或直接访问。在类内部的方法中使用时 public_attrs_attrs,在类的外部class_name.public_attrs。

类的私有属性
__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs。

类的(公有)方法
在类的内部,使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。
self 的名字并不是规定死的,也可以使用 this,但是最好还是按照约定是用 self。

类的私有方法
__private_method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用 ,不能在类的外部调用。self.__private_methods。

#问女性的姓名、工作是没有问题的,但是问女性的年龄、体重是不礼貌的,所以我们把女性年龄定义为私有属性
#定义显示女性的姓名、工作为公有方法,显示女性年龄、体重为私有方法
#类的定义部分
class Woman():
    name = "Juckes"  #类的公有属性
    job = "Teacher" 
    __ages = 30      #类的私有属性
    __weight = 60

    def disp_nj_info(self):  #类的(公有)方法
        print("Name:{}, Job:{}".format(self.name,self.job)) #类的内部调用公有属性

    def __disp_aw_info(self):  #类的私有方法
        print("Age:{}, Weight:{}".format(self.__ages, self.__weight))  #类的内部调用私有属性

    def dis_all_info(self):
        self.disp_nj_info() #类的内部调用公有方法
        self.__disp_aw_info() #类的内部调用私有方法

1、类外使用类的公有属性,OK
主程序

#主程序部分
womanA = Woman()

print(womanA.name, womanA.job)

运行结果:

Juckes Teacher

2、类外使用类的私有属性, Error
主程序

#主程序部分
womanA = Woman()

print(womanA.__ages, womanA.__weight)

运行结果:

Traceback (most recent call last):
  File "D:/untitled2/timer_test.py", line 60, in <module>
    print(womanA.__ages, womanA.__weight)
AttributeError: 'Woman' object has no attribute '__ages'

3、类外使用公用方法,OK
主程序

#主程序部分
womanA = Woman()

womanA.disp_nj_info()

运行结果

Name:Juckes, Job:Teacher

4、类外使用类的私有方法, Error
主程序

#主程序部分
womanA = Woman()

womanA.__disp_aw_info()

运行结果

Traceback (most recent call last):
  File "D:/untitled2/timer_test.py", line 60, in <module>
    womanA.__disp_aw_info()
AttributeError: 'Woman' object has no attribute '__disp_aw_info'

5、类外通过调用公有方法的方式,间接调用私有方法,OK

主程序

#主程序部分
womanA = Woman()

womanA.dis_all_info() #通过调用dis_all_info,间接调用__disp_aw_info

运行结果

Name:Juckes, Job:Teacher
Age:30, Weight:60