python中类方法、实例方法、静态方法、类属性、实例属性、私有属性案例测试

#python是动态语言,表现在可以在程序运行过程中添加属性、方法
#添加变量
class person(object):
    count=1
    __index=99

    def __new__(cls, *args, **kwargs):
        print("这是__new__方法的自动调用,该方法返回值为类object创建的类对象或者父类创建的类对象")
        return object.__new__(cls)

    def __init__(self,name,age):
        self.name=name
        self.age=age
        self.__girlfriend="莫莫"

    def test(self):
        print("这是实例方法test的调用")
        print("实例方法可以调用实例属性和类属性")
        print(self.age)
        print(f"我们正在使用实例方法来调用类公开属性count,其值为:{self.count}")
        print(f"我们也可以在实例方法中使用类对象来调用类公开属性count,其值为:{person.count}")
        print(f"我们正在使用实例方法来调用类私有属性__index,其值为:{self.__index}")
        print(f"我们在实例方法中使用类对象来调用类私有属性__index,其值为:{person.__index}")
        print(f"我们正在实例方法中调用实例公开属性name,其值为:{self.name}")
        print(f"我们正在实例方法中调用实例私有属性__girlfriend,其值为:{self.__girlfriend}")
        #print(f"我们可以在实例方法中调用私有实例方法__test1,调用结果为:{self.__test1()}")
        print("我们可以在实例方法中调用类方法,调用结果为:")
        person.classmethod1()
        person.__classmethod2()

    def __test1(self):
        print("这是实例私有方法__test1的调用")
        print("实例方法可以调用实例属性和类属性")
        print(f"我们正在使用实例方法来调用类公开属性count,其值为:{self.count}")
        print(f"我们也可以在实例方法中使用类对象来调用类公开属性count,其值为:{person.count}")
        print(f"我们正在使用实例方法来调用类私有属性__index,其值为:{self.__index}")
        print(f"我们在实例方法中使用类对象来调用类私有属性__index,其值为:{person.__index}")
        print(f"我们正在实例方法中调用实例公开属性name,其值为:{self.name}")
        print(f"我们正在实例方法中调用实例私有属性__girlfriend,其值为:{self.__girlfriend}")
        print(f"我们可以在实例方法中调用实例方法__test1,调用结果为:{self.test(self)}")
        print("我们可以在实例方法中调用类方法,调用结果为:")
        person.classmethod1(person)
        print("调用私有类方法的结果为:")
        person.__classmethod2(person)

    @classmethod
    def classmethod1(cls):
        print("这是类方法的调用,类方法只能访问类属性,我们可以用类方法对类属性进行更改")
        print(f"初始时类属性count的值为:{cls.count}")
        person.count=99
        print(f"更改之后的count值为{cls.count}")
        print("在类方法中我们也可以调用实例方法:")
        person.test(cls)
        print("私有实例方法的调用结果为:")
        person.__test1(person)

    @classmethod
    def __classmethod2(cls):
        print("这是类私有方法的调用,当然我们也可以用该方法更改类属性")
        print(f"更改之前的count值为:{cls.count}")
        person.count=999
        print(f"更改之后的count值为:{cls.count}")
        print("在类方法中我们也可以调用实例方法:")
        person.test(person)
        print("私有实例方法的调用结果为:")
        person.__test1(person)
        print("我们可以在类方法中通过类对象调用静态方法")
        person.staticmethod1()
        print("静态私有方法的调用结果是:")
        person.__staticmethod2()

    @staticmethod
    def staticmethod1():
        print("这是静态方法的调用")
        print("在静态方法中引用对象属性必须用类对象进行引用")
        print(f"我们现在用类对象来调用类属性count,得出的count的值为:{person.count}(用person调用)")
        print(f"在静态方法中通过类对象可以调用实例方法")
        person.test()
        print("私有实例方法的调用结果为:")
        person.__test1()

    @staticmethod
    def __staticmethod2():
        print("这是静态私有方法的调用")
        print("在静态私有方法中也可以使用类对象来调用类属性的引用")
        print(f"我们现在用类对象在静态私有方法中对类属性进行调用,其值为:{person.count}")
        print(f"在静态方法中通过类对象可以调用实例方法")
        person.test()
        print("私有实例方法的调用结果为:")
        person.__test1()

    def __str__(self):
        print("这是__str__方法的调用")

    def __del__(self):
        print("这是__del__方法的调用,其作用和C++中的析构函数一样")
#python动态语言,在运行过程中添加属性和方法
#添加属性
def add(self):
    print("这是一个要添加到person类中的方法,当我们看到这句话时就完成了添加")
import types
person.add=types.MethodType(add,person)
p=person("天山童姥",99)
p.add()

@classmethod
def classmethods(cls):
    print("这是一个类方法,我们将要把这个类方法添加到person类中去")
person.classmethods=classmethods
p.classmethods()

@staticmethod
def teststaticmethod():
    print("这是一个静态方法,我们成功的将该方法添加到了person类中")
person.teststaticmethod=teststaticmethod
p.teststaticmethod()
上一篇:min_25 筛略解


下一篇:PyQt界面与逻辑分离的两种方法