Python 类及成员的访问权限

举个例子:

class Test
    def __init__(self):
        self.__value = 5

    def getValue(self):
        return self.__value

_foo _:函数前后各一个下划线,定义的特殊方法,一般是系统定义名字。类似 _init _
_foo:以单下划线开头表示protected类型的变量,即保护类型
_ _ foo:以双下环线开头的开始,表示私有类型变量

Python中继承中有一些特点:

  1. 在继承中基类的初始化方法__init__() 不会被自动调用,它需要在其派生类的构造中亲自专门调用
  2. 在调用基类方法时,需要使用super()前缀
  3. Python总是首先查找对应类型的方法,不能再派生类中找到对应的方法时,他才开始到基类中逐个查找

对比一个C++例子和Python的例子:
C++

class Person {
public:
	Person(std::string name, int age, float height) {
		this->name = name;
		this->age = age;
		this->height = height;
	}
	std::string getName() {
		return name;
	}

	int getAge() {
		return age;
	}

	void showInfo() {
		printf("name:", name);
		printf("age:", age);
		printf("height:", height);
		printf("visit:", visit);
		Person::visit++;
	}
public:
	static int visit;

protected:
	std::string name ="";
	int age = 0;
	float height = 0.0;
};

class Teacher :public Person {
	Teacher(std::string name, int age, float height)
		:Person(name, age, height) {

	}

	std::string getTitle() {
		return title;
	}
	void setTitle(std::string title) {
		this->title = title;
	}

	void showInfo() {
		printf("title:",title);
		Person::showInfo();
	}
private:
	std::string title;
};

int Person::visit = 0;

Python



class Person:
    visit = 0
    def __init__(self,name,age,height):
        self._name = name
        self._age = age
        self._height = height

    def getName(self):
        return self._name

    def getAge(self):
        return self._age

    def showInfo(self):
        print("name:", self._name)
        print("age:", self._age)
        print("height:", self._height)
        print("visit:", self.visit)
        Person.visit = Person.visit + 1

class Teacher(Person):
    def __init__(self,name,age,height):
        super().__init__(name,age,height)
        self.__title = None

    def getTitle(self):
        return self.__title

    def setTitle(self,title):
        self.__title = title

    def showInfo(self):
        print("title:",self.__title)
        super().showInfo()

def Test():
    tom = Person("Tom",25,172.2)
    tom.showInfo()

    jerry = Teacher("Jerry",36,180.3)
    jerry.showInfo()

Test()

aaa

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python中有一些访问权限的机制来限制对类的成员的访问。其中包括私有属性和私有方法。私有属性和私有方法是以双下划线开头的成员。当我们尝试在类外部访问私有属性或私有方法时,会出现访问权限错误。例如,当我们尝试访问一个私有属性时,会报错"AttributeError: 'Student' object has no attribute '__name'"。\[1\] 为了在类外部访问私有属性或私有方法,我们可以使用以下两种方法: 1. 为类增加一个公共方法来访问私有属性或私有方法。这是推荐的方法,通过在类中定义一个公共方法来访问私有成员。这样可以保持封装性,并且可以在类外部通过调用公共方法来访问私有成员。\[2\] 2. 使用"实例名._类名__变量名"的方式来访问私有属性或私有方法。这种方式是通过在实例名前加上"_类名__"来访问私有成员。虽然这种方式可以访问私有成员,但不推荐使用,因为它破坏了封装性。\[2\] 例如,对于一个类Student,如果它有一个私有属性__name,我们可以通过在类中定义一个公共方法来访问该私有属性。另外,我们也可以使用"s._Student__name"的方式来访问私有属性。\[3\] #### 引用[.reference_title] - *1* *3* [关于python中的访问限制](https://blog.csdn.net/weixin_43439761/article/details/129700417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python:类的访问权限](https://blog.csdn.net/qq_39314932/article/details/80726608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wb175208

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值