浅谈Python类的属性和方法

本文深入探讨Python类的属性和方法,包括公有、私有、类属性与实例属性的区别,以及静态方法、类方法的使用。详细解析了__xxx的私有化规则,强调了继承与调用的差异,并举例说明了属性和方法的修改。同时,介绍了类方法、静态方法的调用场景,以及单例模式的实现。最后,讨论了方法重写、初始化过程中的继承问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

浅谈Python类的属性和方法

参考文献

在python中,有私有属性和公有属性,方法我们也一样,他们之间有何区别?

还有类属性和实例属性又是怎么回事?

静态方法和类方法又有什么区别?

我们在工作过程中,可能不太清楚,为什么要有私有属性,他们的意义何在?

我们对类的继承,对方法的重写又有哪些要注意的?

本着这些东西既然被设计出来了,就是为了我们更高效的工作这一角度,下面我从工作的角度,简单的说一下,这些点的区别:

xx: 公有变量
_x: 单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问,也就是继承和调用
__xx:双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到),既不能继承也不可以调用
__xx__:双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字
xx_:单后置下划线,用于避免与Python关键词的冲突

我们在继承的时候什么继承不了,什么时候调用不了?

__xxx属性和方法都不可以继承及调用,但是类中其他类型的方法,可以调用__xxx的属性和方法,也可以被继承下来。

_xxx属性和方法 用from moudle import *的方法是无法导入的,但是,只要是子类就可以正常调用和继承,外部导入需要使用from moudle import _XXX

但是,注意,继承和调用是两码事

__xxx方法连调用都调用不了,完全的私有化

可以由如下代码解释:

#coding=utf-8

class Person(object):
		# 定义类的一些属性
		GG = "niuniu"
    _name = "lala"
    __family = "tos"
    def __init__(self, name, age, taste):
        self.name = name
        self._age = age 
        self.__taste = taste

    def showperson(self):
        print(self.name)
        print(self._age)
        print(self.__taste)

    def dowork(self):
        self._work()
        self.__away()


    def _work(self):
        print('my _work')

    def __away(self):
        print('my __away')

class Student(Person):
    def construction(self, name, age, taste):
        self.name = name
        self._age = age 
        self.__taste = taste

    def showstudent(self):
        print(self.name)
        print(self._age)
        print(self.__taste)

    @staticmethod
    def testbug():
        _Bug.showbug()
        
		def squrt(self):
        self._work()
        print(self._name)
        # print(self.__family)
        self.__away()   ## 这块会报错,因为不能继承和调用父类的这种方法

# 模块内可以访问,当from  cur_module import *时,不导入
class _Bug(object):
    @staticmethod
    def showbug():
        print("showbug")

s1 = Student('jack', 25, 'football')
s1.showperson()
print('*'*20)

# 无法访问__taste,导致报错
# s1.showstudent() 
s1.construction('rose', 30, 'basketball')
s1.showperson()
print('*'*20)

s1.showstudent()
print('
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值