-
如果一個(gè)類表現(xiàn)得像一個(gè)list,想使用len()函數(shù)來獲取元素個(gè)數(shù)時(shí),則需要實(shí)現(xiàn)__len__()方法。
通過自定義__len__()方法,可以讓len()函數(shù)返回相關(guān)的結(jié)果,如果沒有定義__len__()方法的類使用len()函數(shù)獲取長度時(shí),將會(huì)引起異常。
class Class:
? ?def __init__(self, students):
? ? ? ?self.students = students
? ?def __len__(self):
? ? ? ?return len(self.students)
students = ['Alice', 'Bob', 'Candy']
class_ = Class(students)
len(class_) # ==> 3查看全部 -
直接str(bob) # ==> '<__main__.Person object at 0x7fc77b859c50>'
在類內(nèi)部定義str后,可以打印任何我們想要的信息
class Person(object):
? ?def __init__(self, name, gender):
? ? ? ?self.name = name
? ? ? ?self.gender = gender
? ?def __str__(self):
? ? ? ?return 'name: {}, gender: {}'.format(self.name, self.gender)
bob = Person('Bob', 'Male')
str(bob) # ==> 'name: Bob, gender: Male'終端輸入bob?# ==> '<__main__.Person object at 0x7fc77b859c50>'
當(dāng)使用str()時(shí),實(shí)際調(diào)用的是__str__()方法,而直接輸入變量,調(diào)用的是__repr__()方法。
也在類中定義rep,終端直接輸bob也可以打印任何我們想要的信息
def __repr__(self):
? ? ? ?return 'name: {}, gender: {}'.format(self.name, self.gender)>>> bob
'name: Bob, gender: Male'查看全部 -
def gcd(a, b):
? ?if b == 0:
? ? ? ?return a
? ?return gcd(b, a % b)求的是最大公約數(shù),可以舉個(gè)例子代入(2,4)就清楚了
def __str__(self):
? ? ? ?g = gcd(self.p, self.q)
? ? ? ?return '{}/{}'.format(int(self.p/g), int(self.q/g))約分
查看全部 -
f = Fib()
print(f(10))
__call__把對(duì)象當(dāng)成一個(gè)函數(shù)來使用
查看全部 -
參考
查看全部 -
關(guān)于調(diào)用兩種方法的時(shí)機(jī)
使用print()時(shí)
使用%s和f'{}'拼接對(duì)象時(shí)
使用str(x)轉(zhuǎn)換對(duì)象x時(shí)
在上述三種場景中,會(huì)優(yōu)先調(diào)用對(duì)象的__str__()方法;若沒有,就調(diào)用__repr__()方法;若再?zèng)]有,則顯示其內(nèi)存地址。
特別地,對(duì)于下面兩種場景:
用%r進(jìn)行字符串拼接時(shí)
用repr(x)轉(zhuǎn)換對(duì)象x時(shí)
則會(huì)調(diào)用這個(gè)對(duì)象的__repr__()方法;若沒有,則不再看其是否有__str__()方法,而是顯示其內(nèi)存地址。
查看全部 -
class Animal():
????????查看全部 -
**kw? ?可變參數(shù)
查看全部 -
在定義繼承類的時(shí)候,有幾點(diǎn)是需要注意的:
- class Student()定義的時(shí)候,需要在括號(hào)內(nèi)寫明繼承的類Person
- 在__init__()方法,需要調(diào)用super(Student, self).__init__(name, gender),來初始化從父類繼承過來的屬性
查看全部 -
open()函數(shù):重要的三個(gè)參數(shù)
1,文件路徑:指定需要打開的文件路徑
2,打開模式:針對(duì)不同文件以及不同操作,會(huì)有不同的打開模式
3,編碼:設(shè)定打開文件的默認(rèn)編碼
查看全部 -
__slots__方法:
只允許類擁有某些屬性,不允許外部再次添加屬性,如果外部增添類屬性,將會(huì)報(bào)錯(cuò)
查看全部 -
input()函數(shù)可以接收外部的輸入。
查看全部 -
1、如果類屬性和實(shí)例屬性名字相同時(shí),實(shí)例屬性的優(yōu)先級(jí)要高于類屬性
2、通過實(shí)例無法修改類的屬性
查看全部 -
如果希望導(dǎo)入模塊的指定部分屬性或函數(shù),那么使用from...import...語句。
使用from ... import as ...語句,as類似重命名,可以把導(dǎo)入的函數(shù)或?qū)傩灾孛麨閯e的名字。
查看全部 -
如果把一個(gè)類實(shí)例也變成一個(gè)可調(diào)用對(duì)象,可以實(shí)現(xiàn)一個(gè)特殊的方法__call__()。
>>> p = Person('Bob', 'Male')
>>> p('Alice') # ==> 用函數(shù)的方式調(diào)用Person類的實(shí)例p
查看全部
舉報(bào)