-
通過函數isinstance()可以判斷一個變量的類型。
查看全部 -
lass Student(Person):
? ?def __init__(self, name, gender, score):
? ? ? ?super(Student, self).__init__(name, gender)
? ? ? ?self.score = score
student = Student('Alice', 'girl', 100)
print(student.name) # ==> Alice
print(student.gender) # ==> girl
print(student.score) # ==> 100在定義繼承類的時候,有幾點是需要注意的:
class Student()定義的時候,需要在括號內寫明繼承的類Person
在__init__()方法,需要調用super(Student, self).__init__(name, gender),來初始化從父類繼承過來的屬性
查看全部 -
Python定義類方法
在上一節課,為了操作實例對象的私有屬性,我們定義了實例方法;同樣的,如果需要需要操作類的私有屬性,則應該定義類的方法。
默認的,在class中定義的全部是實例方法,實例方法第一個參數 self 是實例本身。
要在class中定義類方法,需要這么寫:class Animal(object): ? ? __localtion = 'Asia' ? ? def __init__(self, name, age): ? ? ? ? self.name = name ? ? ? ? self.age = age ? ? @classmethod ? ? def set_localtion(cls, localtion): ? ? ? ? cls.__localtion = localtion ? ? @classmethod ? ? def get_localtion(cls): ? ? ? ? return cls.__localtion print(Animal.get_localtion()) # ==> Asia Animal.set_localtion('Afica') print(Animal.get_localtion()) # ==> Africa
和實例方法不同的是,這里有兩點需要特別注意:
類方法需要使用@classmethod來標記為類方法,否則定義的還是實例方法
類方法的第一個參數將傳入類本身,通常將參數名命名為 cls,上面的 cls.__localtion 實際上相當于Animal.__localtion。
查看全部 -
Python定義實例方法
上一節課提到,私有屬性沒有辦法從外部訪問,只能在類的內部操作;那如果外部需要操作私有屬性怎么辦?這個時候可以通過定義類或者實例的方法來操作私有屬性,本節課先來介紹實例方法。
實例的方法指的就是在類中定義的函數,實例方法的第一個參數永遠都是self,self是一個引用,指向調用該方法的實例對象本身,除此以外,其他參數和普通函數是完全一樣的。class Person(object): ? ? def __init__(self, name): ? ? ? ? self.__name = name ? ? def get_name(self): ? ? ? ? return self.__name
在上面的定義,name是實例的私有屬性,從外部是無法訪問的,而get_name(self) 就是一個實例方法,在實例方法里面是可以操作私有屬性的,注意,它的第一個參數是self。
另外,__init__(self, name)其實也可看做是一個特殊的實例方法。
通過定義get_name(self)方法,在外部就可以通過這個方法訪問私有屬性了。p = Person('Alice') print(p.get_name()) # ==> Alice
注意,在外部調用實例方法時,是不需要顯式傳遞self參數的。
查看全部 -
在類屬性和實例屬性同時存在的情況下,實例屬性的優先級是要高于類屬性的,
查看全部 -
__init__ 這里是雙下劃線
查看全部 -
Python類的定義與實例化
class Person: ?pass
class Person(): pass
class Person(object): ?pass定義了類之后,就可以對類進行實例化了,實例化是指,把抽象的類,賦予實物的過程。比如,定義好Person這個類后,就可以實例化多個Person出來了。
創建實例使用類名+(),類似函數調用的形式創建:class Person(object): ?pass xiaohong = Person() xiaoming = Person()
查看全部 -
class A(object):
? ?def __init__(self, a):
? ? ? ?print ('init A...')
? ? ? ?self.a = a
class B(A):
? ?def __init__(self, a):
? ? ? ?super(B, self).__init__(a)
? ? ? ?print ('init B...')
class C(A):
? ?def __init__(self, a):
? ? ? ?super(C, self).__init__(a)
? ? ? ?print ('init C...')
class D(C, B):
? ?def __init__(self, a):
? ? ? ?super(D, self).__init__(a)
? ? ? ?print ('init D...')
d=D('d')結果(class D(C,B) ==> 先執行B再執行C):
??????????init A...
????????? init B...
???????? ?init C...
??????????init D...
查看全部 -
在類屬性和實例屬性同名的情況下,實例屬性的優先級是要高于類屬性的,在操作實例的時候,優先是操作實例的屬性。
查看全部 -
import time
def performance(unit):
? ? def perf_decorator(f):
? ? ? ? def wrapper(*args, **kwargs):
? ? ? ? ? ? t1 = time.time()
? ? ? ? ? ? r = f(*args, **kwargs)
? ? ? ? ? ? t2 = time.time()
? ? ? ? ? ? t = (t2 - t1) * 1000
? ? ? ? ? ? if unit == 'ms':
? ? ? ? ? ? ? ? t = (t2 - t1) * 1000 * 1000
? ? ? ? ? ? print('call {}() in {}{}'.format(f.__name__,t,unit))
? ? ? ? ? ? return r
? ? ? ? return wrapper
? ? return perf_decorator
@performance('ms')
def factorial(n):
? ? return reduce(lambda x,y:x + y,range(1, n+1))
factorial(10)
查看全部 -
import time
def performance(f):
? ? def fn(*args, **kw):
? ? ? ? t1 = time.time()
? ? ? ? r = f(*args, **kw)
? ? ? ? t2 = time.time()
? ? ? ? print('call %s() in %fs' %(f.__name__,(t2 - t1)))
? ? ? ? return r
? ? return fn
@performance
def ffa(n):
? ? return reduce(lambda x,y: x + y, range(1,n+1))
? ??
print(ffa(10))
查看全部 -
# Enter a code
import socket
server = socket.socket() # 1.新建 socket
server.bind(('127.0.0.1', 8999)) # 2.綁定IP和端口(其中127.0.0.1為本機回環IP)
server.listen(5) # 3.監聽連接
s, addr = server.accept() #4. 接受連接
print('connect addr :{}'.format(addr))
content = s.recv(1024)
print(str(content, encoding = 'utf-8')) #接受來自客戶端的消息,并編碼打印出來\
s.close()
import socket
client = socket.socket() #1.新建socket
client.connect(('127.0.0.1', 8999)) #2.連接服務端(注意,IP和端口要和服務端一致)
client.send(bytes('hello world, hello socket', encoding = 'utf-8')) #發送內容,注意發送的是字節字符串
client.close()
查看全部 -
注意應該是self 不是類名
查看全部 -
? 在上面的代碼中,localtion就是屬于Animal這個類的類屬性,此后,通過Animal()實例化的所有對象,都可以訪問到localtion,并且得到唯一的結果。
? 類屬性也是可以動態添加和修改的,需要注意的是,因為類屬性只有一份,所以改變了,所有實例可以訪問到的類屬性都會變更:
注意應該是Animal(類名) 不是self
查看全部 -
# Enter a code
class Fib(object):
? ? def __init__(self, num):
? ? ? ? self.num = num
? ? ? ? self.res = []
? ? ? ? a = 0
? ? ? ? b = 1?
? ? ? ? for x in range(num):
? ? ? ? ? ? self.res.append(a)
? ? ? ? ? ? a,b = b, a + b
? ??
? ? def __str__(self):
? ? ? ? return str(self.res)
? ??
? ? def __len__(self):
? ? ? ? return self.num
fib = Fib(10)
print(fib)
print(len(fib))
查看全部
舉報