#isinstance(obj,cls)判斷obj是否是類cls的實例
#issubclass(cls,cls1)判斷cls是否是cls1的子類或派生類
class Foo:
pass
class Bar(Foo):
pass
print(issubclass(Bar,Foo))#檢查sub類是否是super類的派生類
f1=Foo()
print(isinstance(f1,Foo))#檢查是否obj是否是類cls對象
#自定義格式化的format方法
x='{0}{0}{0}'.format("dog")
print(x)
format_dic={
'ymd':"{0.year}{0.mon}{0.day}",
"m-d-y":"{0.mon}-{0.day}-{0.year}",
"y:m:d":"{0.year}:{0.mon}:{0.day}"
}
class Date:
def __init__(self,year,mon,day):
self.year=year
self.mon=mon
self.day=day
def __format__(self, format_spec):#改寫系統內置的format屬性
print("我執行了")
print("-->",format_spec)
if format_spec:
fm=format_dic[format_spec]
return fm.format(d1)
else:
return "為空"
d1=Date(2016,12,26)
#format(d1)#d1.__format__()
print(format(d1))#d1.__format__()
print(format(d1,"ymd"))
d1.name="alex"
print(d1.name)
# x='{0.year}{0.mon}{0.day}'.format(d1)
# print(x)
###改變字符串的顯示方法 str,repr
# l=list("hello")
#
# print(l)
# class Foo:
# def __str__(self):
# return "自己定制的對象的顯示方式"
#
# f1=Foo()
# print(f1)#-->str(f1)-->f1.__str__()
# file=open("test.txt","w")
# print(file)
#自己定制str方法
class Foo:
def __init__(self,name,age):
self.name=name
self.age=age
# def __str__(self):#當前str與repr共存
# return "這是str"
#
# def __repr__(self):#repr或者交互式解釋器
# return "名字是%s 年齡是%s" %(self.name,self.age)
f1=Foo("egon",19)
#repr(f1)-->f1.__repr__()
# print(f1)#str(f1)--->f1.__str__()----->f1.__repr__()
f1.__str__()
print(str(f1))
#call方法,對象通過()訪問
class Foo:
def __call__(self, *args, **kwargs):
print("實例執行了obj")
f1=Foo()
f1()#foo下的.__call__
Foo()#abc下的__call__
#通過類的next和iter實現迭代器協議
class Foo:
def __init__(self,n):
self.n=n
def __iter__(self):
return self
def __next__(self):
if self.n==100:
raise StopIteration("終止了")
self.n+=1
return self.n
# l=list('hello')
# for i in l:
# print(i)
f1=Foo(10)
print(next(f1))
print(next(f1))
print(f1.__next__())
for i in f1: #f1.__iter__() ==iter(f1)
print(i)#next(f1) for循環捕捉異常終止
class Fib:
def __init__(self):
self.a=1
self.b=1
def __iter__(self):
return self
def __next__(self):
self.a,self.b=self.b, self.a+self.b
if self.b>100:
raise StopIteration("終止了")
return self.a
f1=Fib()
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print(next(f1))
print("=====>")
for i in f1:
print(i)
class Foo:
# __slots__ = ["name","age"]#{"name":none,"age":"none"}
__slots__ = "name"#限定實例的數據屬性,節省內存
f1=Foo()
f1.name="egon"
print(f1.name)
#f1.age=18 #__setattr__---->f1.__dict__["age"]=18
# print(f1.__dict__)
print(f1.__slots__)
print(f1.__slots__)