python进阶2——类与实例

文章详细介绍了Python中的类和实例的概念,包括子类和父类的类型判断、类属性和实例属性的区分、静态方法和类方法的使用,以及私有化和限制访问的机制。通过实例展示了如何进行类型判断、访问和修改属性,以及调用静态方法和类方法。同时强调了Python中私有属性的伪私有化特性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、子类和父类类型判别

A是B的父类时,如何进行继承后的类型判断?

class A:
    pass
class B(A):#B作为子类继承A
    pass
a,b = A(),B()
print(type(a),type(b),type(a) is type(b))#可见type只能查到本类的类型,并不能准确反映继承后的类关系

print(isinstance(b,(A,B)))#改用isinstance函数判断
print(isinstance(a,(B)))

isinstance
result

二、类属性和实例属性

代码如下(示例):

class A():
    k=114514
    def __init__(self,x,y):
        self.x = x
        self.y = y
    pass

a = A(1,2)
print(a.x,a.y,a.k,A.k)#一般情况下,实例和类都能访问到同一个类属性

a.k=123#这种直接访问修改的方式貌似合理,但是会被作为猴子补丁处理,就是为实例增加了一个新的k的实例属性
print(a.x,a.y,a.k,A.k)

resul

三、静态方法和类方法。

两者均不需要绑定到实例上,也就是不需要一个实例化后的对象就可以调用。
静态方法用@staticmethod修饰,类方法用classmethod修饰,
因此静态方法无法直接访问类属性和实例属性,(当然,也可以在静态方法中通过类名访问到类属性)
类方法无法直接访问实例属性

class Circle:
    shape = "circle"
    def __init__(self,x,y):
        self.x,self.y =x,y
        pass
    @classmethod
    def show_shape(cls):
        print(cls.shape)
    @staticmethod
    def func():
        print("this is a staticmethod")
    pass
c = Circle(3,4)
Circle.show_shape()
Circle.func()

result


四、私有化和限制访问

和C++这样的强类型语言一样,python也对类的属性进行了限制访问。
python类的私有属性以“__”来开头,在类的内部可以正常访问,但是在继承后和类外无法直接访问。
但是python的类私有化是伪私有化,可以通过_类名.__属性名来访问。

class MyClass:
    def __init__(self):
        self.__private_var = 10
    def __private_method(self):
        print("Private method")
    def public_method(self):
        print("Public method")
        print(self.__private_var)
        self.__private_method()  


obj = MyClass()
obj.public_method()
# obj.__private_var  # AttributeError: 'MyClass' object has no attribute '__private_var'
# obj.__private_method()  # AttributeError: 'MyClass' object has no attribute '__private_method'
print(obj._MyClass__private_var)  # 通过名称修正访问私有属性
obj._MyClass__private_method()  # 通过名称修正调用私有方法

总结

下次见!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值