super()私有函数
时间: 2023-10-19 16:30:51 浏览: 34
super() 不是一个私有函数,而是 Python 中用于调用父类方法的一个内置函数。它可以在子类中调用父类的方法,以便继承和覆盖父类的行为。
通常,我们使用 super() 函数来调用父类的构造函数。例如,在子类的构造函数中,我们可以使用 super().__init__() 调用父类的构造函数,以确保子类对象正确地初始化。
除了调用构造函数外,super() 还可以用于调用父类的其他方法。这样可以在子类中重写父类的方法,并在子类中使用 super() 来调用父类的方法。
需要注意的是,super() 的使用必须遵循一定的规则和顺序。它只能在继承关系中使用,并且必须在子类中调用。
相关问题
python 私有 独有
Python中的私有属性和方法可以通过在它们的名称前加上双下划线来定义,这样可以限制对它们的直接访问。当然,这只是一种约定,实际上Python中的私有属性和方法仍然可以通过特定的方式进行访问。
引用是一个使用字符串格式化输出的例子,其中使用了%s来表示占位符,并通过传入变量的值来替换占位符。这段代码的功能是输出一个字符串,其中包含了某个对象的姓名、性别和外貌特征。
引用是一个类方法的定义示例,其中使用了super()函数来调用父类的__new__()方法,并使用cls参数传递当前类的引用。该类方法通常用于在创建对象之前进行一些额外的操作。
引用是一个定义私有方法的示例,其中set_id_card()方法用于设置私有变量id_card的值。该方法需要传入self参数,表示当前对象的引用,以便在方法内部访问私有变量。
综上所述,Python中的私有属性和方法是通过在名称前加上双下划线来定义的,但实际上仍然可以通过特定的方式进行访问。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [python3成员方法,独有变量,私有属性](https://blog.csdn.net/weixin_39728544/article/details/110163221)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [python面型对象编程进阶(继承、多态、私有化、异常捕获、类属性和类方法)](https://blog.csdn.net/weixin_39583623/article/details/110472037)[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^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
用构造函数去重
如果你想在创建对象时去除重复的属性,可以在构造函数中进行判断和处理。例如,假设你有一个Person类,有name、age和gender三个属性,你希望创建对象时如果有重复的name属性则只保留一个,可以这样实现:
```python
class Person:
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
self.__class__.instances[name] = self
instances = {}
def __new__(cls, name, age, gender):
if name in cls.instances:
return cls.instances[name]
return super().__new__(cls)
def __repr__(self):
return f"Person(name='{self.name}', age={self.age}, gender='{self.gender}')"
```
在这个实现中,我们使用类变量`instances`来存储所有已经创建的对象,以name属性作为键。在构造函数中,如果当前name属性已经存在于`instances`中,则直接返回之前已经创建的对象;否则,创建新的对象并将其加入到`instances`中。这样,我们就可以保证同名的对象只会创建一次。同时,为了防止`instances`被外部修改,我们将其定义为私有属性。最后,我们重载了`__repr__`方法,方便调试时输出对象的信息。
以下是一个示例,演示了如何使用这个类:
```python
p1 = Person('Alice', 20, 'F')
p2 = Person('Bob', 25, 'M')
p3 = Person('Alice', 30, 'F')
print(p1) # Person(name='Alice', age=20, gender='F')
print(p2) # Person(name='Bob', age=25, gender='M')
print(p3) # Person(name='Alice', age=20, gender='F')
print(p1 is p3) # True
```
在这个示例中,我们创建了三个Person对象,其中第一个和第三个对象的name属性重复。但是,输出结果中只有两个对象,因为第一个和第三个对象实际上是同一个对象。