类有哪些内置的属性?¶
在Python3.0以上版本里面,所有的类都是默认从Object继承而来。那他就会带有Object的属性。 我们可以通过dir()函数来查看。我们可以写一个简单的类来查看其属性。:
class Book:
pass
print(dir(Book))
#输出内容为:
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__',
'__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__',
'__str__', '__subclasshook__', '__weakref__']
book = Book()
print(dir(book))
我们由浅入深,以及是否常用来逐个来介绍其含义和用法。
- ‘__doc__’ 是类的文档字符串,help函数会把这部分内容进行输出。
- ‘__dict__’ 用于存储可写属性的词典。
- ‘__module__’ 定义这个类的模块名称。
- ‘__eq__’ “equal”的缩写,等于比较”==”调用这个方法。
- ‘__ge__’ “greater than or equal”的缩写, 大于等于”>=”调用这个方法。
- ‘__gt__’ “greater than”的缩写, 大于比较”>”调用这个方法。
- ’__le__’ “less than or equal”的缩写, 小于或等于”<=”调用这个方法。
- ‘__lt__’ “less than”的缩写,小于比较”<”就调用这个方法。
- ’__ne__’ “not equal”的缩写,不等于比较”!=”调用这个方法。
- “__class__”, 实例所属的类
- “__hash__” 返回对象的散列函数值。如果两个对象通过”__eq__”比较相等,那 其散列后的值也必须相同,如果我们没有自己实现”__hash__”, 那散列值和其实际 地址相关。
- “__new__” 在创建新实例时被调用,它是一个静态方法。
- “__init__” 在实例创建后被调用,但是在返回给用户之前。它返回None。
- “__sizeof__” 在自定义类型时,如果使用sys.getsizeof()函数获取对象大小可能不准 我们需要重写__sizeof__函数来计算对象大小。
对于我们自定义类,如果我们要比较对象,我们需要自己来实现这些方法。例如两本书 使用价格来比较大小
class Book:
"""Class Book demo"""
def __init__(self, price):
self.price = price
def __gt__(self, other):
return self.price>other.price
b= Book(10)
c= Book(20)
print("book:")
print(c>b)
通常如果实现“__gt__”,那其他5个函数也需要实现。
还有一些是不在dir函数中显示的方法,
- __bases__ 类的基类构成的元组
- “__name__” 类的名称,是一个字符串
- “__del__” 在对实例进行del时,该成员函数被调用。
例如”__name__”:
print(Book.__name__) #输出Book, 这是类属性。