类与对象的补充知识点
一。Pickle与对象的保存
class Course:
def __init__(self,name,period,price):
self.name = name
self.period = period
self.price = price
# python = Course('python','6
moneth',21800)
# linux = Course('linux','5 moneth',19800)
# go = Course('go','4 moneth',12800)
import pickle
# with open('pickle_file','ab') as f:
#将对象序列化为文件。
#
pickle.dump(python,f)
#
pickle.dump(linux,f)
#
pickle.dump(go,f)
with open('pickle_file','rb')
as f: #将文件反序列化为对象
while
True:
try:
obj = pickle.load(f)
print(obj.name,obj.period)
except EOFError:
break
在游戏中可以将多个对象序列化后保存为文件,需要时再反序列化为对象,可以直接操作。
但要注意,序列化和反序列化操作时,对象可以不存在,但类必须存在。
二。isinstance与type用法比较
a = 1 b = 'abc'
print(isinstance(a,int)) #True #isinstance判断是否是某数据类型。
print(isinstance(a,float)) #False
print(isinstance(b,str)) #True
a = 1 b = 'abc'
print(type(a) is int) #True
print(type(b) is str) #True
class Cat:pass
小白 = Cat()
print(type(小白) is Cat) #True
print(isinstance(小白,Cat)) #True
class Animal:pass
class Cat(Animal):pass
小白 = Cat() #小白是Cat类的对象,但继承了Animal类。
print(type(小白) is Cat) #True
print(type(小白) is Animal) #False (小白)的类型是Cat,不是Animal的对象。
print(isinstance(小白,Cat)) #true
print(isinstance(小白,Animal)) #true
isinstanc判断类与类之间的继承关系,对象是不是这个类以及子类的对象。
三。方法与函数
from types import FunctionType,MethodType
FunctionType : 函数
MethodType : 方法
class A:
def func(self):
print('in func')
print(A.func) # 用类调用,只是函数 <function A.func at 0x00776898>
a = A()
print(a.func) # 用对象调类里的函数,就叫方法
# <bound method A.func of <__main__.A object at 0x00752D30>>
print(isinstance(a.func,MethodType)) #True
print(isinstance(A.func,FunctionType)) #True
方法与函数的区别:不在于它是否写在类里,而在于谁调用它。用类调用就是函数,用对象调用,就是方法。
四。类的相关知识
类有两种作用:属性引用和实例化
1:查看我们定义的类的属性到底存在哪里:
1.dir(类名):查出的是一个名字列表
2.类名.__dict__:查出的是一个字典,key为属性名,value为属性值
2.类的特殊方法
class A:
role = '法师'
def func1(self):pass
def func2(self):pass
class B:pass
class C(B,A):pass
print(A.__base__) #类的第一个父类,没有时为类祖宗:<class
'object'>
print(C.__base__) #类的第一个父类,<class '__main__.B'>
print(C.__bases__) #类所有父类构成的元组:(<class
'__main__.B'>, <class '__main__.A'>)
print(A.__dict__) #类的字典属性
print(A.__name__) # 类的名字(字符串):A
print(A.__class__) # 实例对应的类:<class 'type'>
print(B.__class__) # 实例对应的类:<class 'type'>
print(C.__class__) # 实例对应的类:<class 'type'>
print(C.__module__) # 类定义所在的模块:__main__
类有两种作用:属性引用和实例化
一:查看我们定义的类的属性到底存在哪里:
1.dir(类名):查出的是一个名字列表
2.类名.__dict__:查出的是一个字典,key为属性名,value为属性值
二.类的特殊方法
class A:
role = '法师'
def func1(self):pass
def func2(self):pass
class B:pass
class C(B,A):pass
print(A.__base__) #类的第一个父类,没有时为类祖宗:<class
'object'>
print(C.__base__) #类的第一个父类,<class '__main__.B'>
print(C.__bases__) #类所有父类构成的元组:(<class
'__main__.B'>, <class '__main__.A'>)
print(A.__dict__) #类的字典属性
print(A.__name__) # 类的名字(字符串):A
print(A.__class__) # 实例对应的类:<class 'type'>
print(B.__class__) # 实例对应的类:<class 'type'>
print(C.__class__) # 实例对应的类:<class 'type'>
print(C.__module__) # 类定义所在的模块:__main__