Python入门 | 面向对象

目录

类与对象

实例方法、类属性、实例属性

类属性与实例属性的访问

​编辑

如何理解实例方法的第一个参数self

 实例方法、类方法与静态方法

 类方法

 静态方法

​编辑

魔术方法

__str__

 __new__

__del__

继承

第一个继承的例子(单继承)

 多继承

同名属性/方法的优先级

多态

私有属性与私有方法

私有属性无法继承

属性函数

__new__与单例模式

绑定方法与非绑定方法

slots


类与对象

实例方法、类属性、实例属性

  • 实例方法:第一个参数是self
  • 类属性:属于类,定义在方法之外,无‘self.’前缀
  • 实例属性:属于对象,定义在方法之内,有‘self.’前缀

下面定义了一个类,同时包括实例方法、类属性和实例属性。

class OnePeople(): #大驼峰命名法
    age=20 #类属性
    def __init__(self): #实例方法 __魔术方法__
        self.name='Leo' #实例属性
        pass
    
onepeople=OnePeople()
print(onepeople.age,onepeople.name)

类属性与实例属性的访问

类属性可以通过类和对象访问,实例属性只能通过对象访问。当类属性和实例属性同名时,优先访问实例属性。

# 类属性与实例属性
class Student():
    age=18 #类属性
    def __init__(self,name):
        self.name=name
    def __str__(self):
        return f"name={self.name},age={self.age}"
xiaoming=Student("xiaoming")
#使用类对象访问类属性
print(Student.age)
#使用实例对象访问实例属性和类属性(查找时,先查找实例属性,然后再查类属性)
print(xiaoming.age,xiaoming.name)

如何理解实例方法的第一个参数self

这个参数就是对象本身。下面的代码先输出对象本身,再在实例方法中输出self,可以看到结果是一样的。

#如何理解self:调用实例方法时,把对象当做第一个参数,赋值给self
class People():
    age=20 
    def __init__(self): 
        self.name='Leo' 
        pass
    
    def printinfo(self):
        print(self)

xm=People()
print(xm)
xm.printinfo()

 

 实例方法、类方法与静态方法

Python中方法分为三种:

  1. 实例方法,第一个参数为self,只能通过实例对象访问。能访问类属性和实例属性。无需装饰器。
  2. 类方法,第一个参数为cls,能通过类对象和实例对象访问。可以访问类属性,不能访问实例属性。装饰器@classmethod。
  3. 静态方法,没有特定的第一个参数,能通过类对象和实例对象访问。不能访问类属性和实例属性。装饰器@staticmethod。

 类方法

通常来说,类属性只能通过类对象修改。如果硬用实例对象修改类属性,实际上是创建了一个新的实例属性。但是,我们知道类对象和实例对象都可以访问类方法。使用类方法,我们可以通过实例对象来修改类属性了。

#类方法
class People():
    country='china'
    @classmethod
    def printcountry(cls):
        print(cls.country)
    @classmethod
    def changecountry(cls,country):
        cls.country=country
        

xm=People()
xm.printcountry()
People.printcountry()
print('********* 使用类方法 通过实例对象 修改类属性 **********')
xm.changecountry("usa")
xm.printcountry()
People.printcountry()
print('********* 使用类方法 通过类对象 修改类属性 **********')
People.changecountry("uk")
xm.printcountry()
People.printcountry()
print('********* 类对象 可以直接修改类属性 **********')
People.country='japan'
xm.printcountry()
People.printcountry()

 静态方法

#静态方法:不需要参数,一般就是逻辑性的代码,与类属性、实例属性无关,所以一般不用实例对象调用
#可以节省资源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值