
查看指定对象的属性
class Person(object):
def __init__(self,name,age):
self.name=name
self.age =age
def show(self):
print(f'大家好,我叫{self.name},我今年{self.age}岁')
#创建Person类的对象
per=Person('cmm',18) #创建对象的时候就会自动调用__init__方法
# 使用dir函数打印出per对象的所有属性和方法(包括继承自object类的)
# dir函数会返回一个列表,包含对象的所有属性和方法名(字符串形式)
print(dir(per))
# 这里并没有直接调用Person类的某个方法,而是尝试将对象转换为字符串表示
# 在Python中,当打印一个对象时,会尝试调用该对象的__str__方法(如果定义了的话)
# 如果__str__方法没有定义,则会调用__repr__方法(如果定义了的话)
# 对于这个Person类,我们没有定义__str__或__repr__方法,所以Python会使用默认的表示方式
# 默认的表示方式通常包括类名和对象的内存地址(但具体表现可能因Python版本和解释器而异)
print(per) #自动调用了__str__方法
注意事项
- 当我们创建
Person
类的对象per
时,Python会自动调用Person
类的__init__
方法来初始化对象。 dir(per)
函数会返回一个包含per
对象所有属性和方法名的列表。这个列表包括Person
类定义的属性和方法,以及从object
类继承的属性和方法。- 当我们打印
per
对象时,Python会尝试找到一个合适的字符串表示来显示该对象。由于Person
类没有定义__str__
或__repr__
方法,Python会使用默认的表示方式,这通常不是很有用,因为它可能只包含对象的类型和内存地址。 - 如果你希望自定义对象的字符串表示,可以在
Person
类中定义__str__
方法(用于人类可读的字符串表示)或__repr__
方法(用于开发者调试的字符串表示)。
输出
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getstate', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'age', 'name', 'show']
<main.Person object at 0x000001D2D81BDED0>
__str__方法重写之前
class Person(object):
def __init__(self,name,age):
self.name=name
self.age =age
def show(self):
print(f'大家好,我叫{self.name},我今年{self.age}岁')
#创建Person类的对象
per=Person('cmm',18) #创建对象的时候就会自动调用__init__方法
print(dir(per))
print(per) #自动调用了__str__方法
输出
['class', 'delattr', 'dict', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getstate', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'module', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'weakref', 'age', 'name']
__str__方法重写之后
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return '这是一个人类,具有name和age两个属性' #返回值是字符串
#创造Person类对象
per=Person('cmm',20)
print(per) #输出__str__方法内容 直接输出对象名,实际上是调用__str__方法
print(per.__str__()) #手动调用
输出
这是一个人类,具有name和age两个属性
这是一个人类,具有name和age两个属性

(仅供参考)
Comments NOTHING