def str(self):作用,举例
时间: 2023-06-05 07:06:44 浏览: 53
def str(self)是一个Python内置函数,表示将对象转换为字符串的操作。当Python需要将一个对象转换为字符串时,会自动调用该函数来进行转换。 在一个类中,如果定义了这个函数,那么在使用print()函数打印该类的实例时,会默认调用该函数来完成对象到字符串的转换。
举例来说,假设我们有一个学生类,我们可以定义str函数来将一个学生的所有信息都打印出来,例如:
class Student:
def __init__(self, name, age, major):
self.name = name
self.age = age
self.major = major
def __str__(self):
return "Name: {} Age: {} Major: {}".format(self.name, self.age, self.major)
现在我们可以创建一个学生对象,并使用print()函数来打印该对象:
student = Student("张三", 20, "计算机科学")
print(student)
输出结果为:
Name: 张三 Age: 20 Major: 计算机科学
相关问题
class iStr(str): def __init__(self, *args): self.lowered = str.lower(self) def __repr__(self): return '%s(%s)' % (type(self).__name__, str.__repr__(self)) def __hash__(self): return hash(self._lowered) def lower(self): return self._lowered def _make_case_insensitive(name): str_meth = getattr(str, name) def x(self, other, *args): try: other = other.lower() except (TypeError, AttributeError, ValueError): pass return str_meth(self._lowered, other, *args) setattr(iStr, name, x) for name in 'eq lt le gt gt ne contains'.split(): _make_case_insensitive('__%s__' % name) for name in 'count endswith find index rfind rindex startswith'.split(): _make_case_insensitive(name) del _make_case_insensitive 将以上代码逐句逐行进行详细解释,超级超级详细,并且告知该如何输出,举例输出并打印
这段代码定义了一个名为`iStr`的自定义字符串类,它是对内置字符串类`str`的扩展,实现了不区分大小写的字符串比较和操作。
让我们逐句逐行详细解释代码:
```python
class iStr(str):
```
这段代码定义了一个名为`iStr`的类,它继承自内置字符串类`str`。
```python
def __init__(self, *args):
self.lowered = str.lower(self)
```
这是`iStr`类的初始化方法。它接受任意数量的参数,并将调用内置字符串类的`lower`方法将字符串转换为小写形式,并将结果存储在实例变量`lowered`中。
```python
def __repr__(self):
return '%s(%s)' % (type(self).__name__, str.__repr__(self))
```
这是`iStr`类的字符串表示方法。它返回一个表示该实例的字符串,格式为类名加上原始字符串的表示形式。
```python
def __hash__(self):
return hash(self._lowered)
```
这是`iStr`类的哈希方法。它返回实例的哈希值,使用小写形式的字符串进行哈希运算。
```python
def lower(self):
return self._lowered
```
这是`iStr`类的`lower`方法。它返回实例的小写形式字符串。
```python
def _make_case_insensitive(name):
str_meth = getattr(str, name)
def x(self, other, *args):
try:
other = other.lower()
except (TypeError, AttributeError, ValueError):
pass
return str_meth(self._lowered, other, *args)
setattr(iStr, name, x)
```
这是一个辅助函数`_make_case_insensitive`,它用于创建不区分大小写的字符串操作方法。它接受一个字符串方法的名称作为参数。
在函数内部,首先使用`getattr`函数获取内置字符串类`str`中的对应方法。
然后,定义了一个名为`x`的内部函数,它接受实例`self`、其他参数`other`和任意数量的额外参数。在函数内部,尝试将`other`转换为小写形式,并调用原始字符串方法来进行比较或操作。
最后,使用`setattr`函数将新定义的方法`x`添加到`iStr`类中,名称与原始字符串方法的名称相同。
```python
for name in 'eq lt le gt gt ne contains'.split():
_make_case_insensitive('__%s__' % name)
```
这个循环使用辅助函数`_make_case_insensitive`创建了一系列不区分大小写的比较操作方法,包括等于、小于、小于等于、大于、大于等于、不等于和包含。
```python
for name in 'count endswith find index rfind rindex startswith'.split():
_make_case_insensitive(name)
```
这个循环使用辅助函数`_make_case_insensitive`创建了一系列不区分大小写的字符串操作方法,包括计数、以什么结尾、查找、索引等。
```python
del _make_case_insensitive
```
最后,删除了辅助函数`_make_case_insensitive`,以避免在后续代码中被误用。
现在,让我们来看一个使用`iStr`类的示例:
```python
s = iStr("Hello World")
print(s) # 输出:iStr('Hello World')
print(s.lower()) # 输出:hello world
print(s.startswith("hello")) # 输出:True
print(s.contains("WORLD")) # 输出:True
print(s.count("o")) # 输出:2
```
在这个示例中,我们创建了一个`iStr`类的实例`s`,并调用了它的一些方法来进行字符串比较和操作。由于`iStr`类实现了不区分大小写的功能,所以不论传入的参数是大写还是小写,都能正确地进行比较和操作,并返回预期的结果。
能分别举例吗
当然可以,下面是一些常用的类和函数及其用法示例:
1. QObject类
```python
class MyObject(QObject):
my_signal = pyqtSignal(str)
def __init__(self):
super().__init__()
def my_slot(self, text):
print(text)
my_obj = MyObject()
my_obj.my_signal.connect(my_obj.my_slot)
my_obj.my_signal.emit('Hello, PyQt5!')
```
这个示例定义了一个 MyObject 类,该类继承自 QObject 类,其中定义了一个 my_signal 信号和一个 my_slot 槽函数。在主程序中,创建了一个 MyObject 对象 my_obj,并将 my_signal 信号与 my_slot 槽函数连接起来,然后通过 emit() 函数发送了一个信号。
2. QThread类
```python
class MyThread(QThread):
def __init__(self):
super().__init__()
def run(self):
for i in range(5):
print('Thread:', i)
time.sleep(1)
my_thread = MyThread()
my_thread.start()
```
这个示例定义了一个 MyThread 类,该类继承自 QThread 类,其中定义了一个 run() 函数,用于在单独的线程中执行一些耗时的操作。在主程序中,创建了一个 MyThread 对象 my_thread,并通过 start() 函数启动了一个新的线程。
3. QTimer类
```python
class MyTimer(QObject):
def __init__(self):
super().__init__()
self.timer = QTimer()
self.timer.timeout.connect(self.my_slot)
self.timer.start(1000)
def my_slot(self):
print('Timer')
app = QCoreApplication([])
my_timer = MyTimer()
app.exec_()
```
这个示例定义了一个 MyTimer 类,其中创建了一个 QTimer 对象,并将其 timeout 信号与 my_slot 槽函数连接起来。在主程序中,创建了一个 QCoreApplication 对象 app,并创建了一个 MyTimer 对象 my_timer,然后通过 exec_() 函数进入事件循环,每隔一秒钟就会执行一次 my_slot 函数。
以上是三个常用类的示例,通过这些示例可以了解 QtCore 模块中的一些基础类的使用方法。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)