目录
类与对象
实例方法、类属性、实例属性
- 实例方法:第一个参数是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中方法分为三种:
- 实例方法,第一个参数为self,只能通过实例对象访问。能访问类属性和实例属性。无需装饰器。
- 类方法,第一个参数为cls,能通过类对象和实例对象访问。可以访问类属性,不能访问实例属性。装饰器@classmethod。
- 静态方法,没有特定的第一个参数,能通过类对象和实例对象访问。不能访问类属性和实例属性。装饰器@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()
静态方法
#静态方法:不需要参数,一般就是逻辑性的代码,与类属性、实例属性无关,所以一般不用实例对象调用
#可以节省资源