类与对象的补充知识点

一。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
    在游戏中可以将多个对象序列化后保存为文件,需要时再反序列化为对象,可以直接操作。
    但要注意,序列化和反序列化操作时,对象可以不存在,但类必须存在。

 二。isinstancetype用法比较

        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__

 

posted @ 2020-07-28 14:38  qqq789001  阅读(90)  评论(0编辑  收藏  举报