继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

【九月打卡】第2天 Python类属性与方法

小白兔1215
关注TA
已关注
手记 55
粉丝 3
获赞 2

课程内容

  • 类属性和实例属性的优先级
  • 类属性访问限制
  • 定义实例方法
  • 定义类方法

学习收获

类属性的优先级

属性可以分为类属性和实例属性。

在类属性和实例属性同时存在的情况下,实例属性的优先级是要高于类属性的,在操作实例的时候,优先是操作实例的属性。

实例没有和类同名的时候,通过实例对象,依然可以访问到类属性。

class Animal(object):
    localtion = 'Asia'
    def __init__(self, name, age, location):
        self.name = name
        self.age = age
		self.location = location

cat = Animal('mimi', 3, 'GuangDong')
print(cat.localtion) # ==> GuangDong
print(Animal.location) # ==> Asia

通过实例是无法修改类的属性的,事实上,通过实例方法修改类属性,只是给实例绑定了一个对应的实例属性。尽量不要通过实例来修改类属性,否则很容易引发意想不到的错误。

类属性的访问限制

并不是所有的属性都可以被外部访问的,这种不能被外部访问的属性称为私有属性。私有属性是以双下划线__开头的属性。

在外部访问私有属性将会抛出异常,提示没有这个属性。虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的。

定义实例方法

类除了拥有属性还有方法。

私有属性没有办法从外部访问,只能在类的内部操作;那如果外部需要操作私有属性怎么办?这个时候可以通过定义类或者实例的方法来操作私有属性。

实例的方法指的就是在类中定义的函数,实例方法的第一个参数永远都是self,self是一个引用,指向调用该方法的实例对象本身,除此以外,其他参数和普通函数是完全一样的。

注意,在外部调用实例方法时,是不需要显式传递self参数的。

class Animal:
    def __init__(self,name,age):
        self.__name = name
        self.__age = age
        
    def getAnimalInfo(self):
        return 'my name is {},and age is {}'.format(self.__name,self.__age)
        
    def setAnimalInfo(self,name,age = 10):
        self.__name = name
        self.__age = age
        
    
cat = Animal('kitty',2)

print(cat.getAnimalInfo())

cat.setAnimalInfo('huahua',3)

print(cat.getAnimalInfo())

定义类的方法

为了操作实例对象的私有属性,我们定义了实例方法;同样的,如果需要需要操作类的私有属性,则应该定义类的方法。

默认的,在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。

类方法和实例方法不同的是,这里有两点需要特别注意:

  • 类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
  • 类方法的第一个参数将传入类本身,通常将参数名命名为 cls

类方法无法获得任何实例变量,只能获得类的引用。因为是在类上调用,而非实例上调用。

class Animal:
    
    __location = 'Asia'
    
    def __init__(self,name,age):
        self.name = name 
        self.age = age
        
    @classmethod
    def getLocation(cls):
        return cls.__location;
        
    @classmethod
    def setLocation(cls,location):
        cls.__location = location
        

cat = Animal('cat',2)

dog = Animal('dog',4)

print(Animal.getLocation())

Animal.setLocation('GuangDong')

print(Animal.getLocation())

打卡截图

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP