Python进阶(一):面向对象

面向对象

定义

  1. 程序设计的范式
  2. 抽象并建立对象模型

使用

# 定义与实例化
class Animal: pass      #python2 只继承少部分内建函数
class Animal(): pass
class Animal(object): pass

dog = Animal()

# 实例属性的定义
dog.name = 'xiaowang'
dog.age = 14

print dog.name,dog.age

# 实例属性的初始化
class Animal():
    def __init__(self,name,age):   #self不可漏掉
        self.name = name
        self.age = age
        
dog = Animal('xiaowang',16)
cat = Animal('xiaochen',17)

print dog.name,dog.age
print cat.name,cat.age

# 类属性
class Animal(object):
    localtion = 'Asia'
    def __init__(self, name, age):
        self.name = name
        self.age = age
        
dog = Animal('wangwang', 1)
cat = Animal('mimi', 3)
print dog.localtion # ==> Asia
print cat.localtion # ==> Asia
print Animal.localtion  # ==> Asia  类属性,也可以通过类名直接访问

Animal.localtion = 'Africa'         #动态修改  
print(cat.localtion) # ==>Africa
print(dog.localtion) # ==>Africa

# 类属性与实例属性class Animal(object):
    localtion = 'Asia'
    def __init__(self, name, age, localtion):
        self.name = name
        self.age = age
        self.localtion = localtion
'''
实例属性优先级高于类属性
不可通过实例属性修改类属性,只会给实例绑定对应的属性
'''

# 私有属性
# 类私有属性
class Animal(object):
    __localtion = 'Asia'
# 实例私有属性
class Animal(object):
    def __init__(self, name, age, localtion):
        self.name = name
        self.age = age
        self.__localtion = localtion

dog = Animal('wangwang', 1, 'GuangDong')
print(dog.name) # ==> wangwang
print(dog.age) # ==> 1
print(dog.__localtion)
'''
在外部访问私有属性将会抛出异常,提示没有这个属性。
虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。私有属性是为了保护类或实例属性不被外部污染而设计的。
'''

'''定义实例方法
实例的方法指的就是在类中定义的函数,实例方法的第一个参数永远都是self,self是一个引用,指向调用该方法的实例对象本身,除此以外,其他参数和普通函数是完全一样的。
'''
class Animal(object):
    __kinds = '2'
    def __init__(self, name, age, localtion):
        self.__name = name
        self.__age = age
        self.__localtion = localtion
    
    def set_name(self,name):
        self.__name = name
    
    def set_age(self,age):
        self.__age = age
        
    def set_localtion(self,localtion):
        self.__localtion = localtion
        
    def get_name(self):
        return self.__name
    
    def get_age(self):
        return self.__age
    
    def get_localtion(self):
        return self.__localtion

    def get_kind(self):
        return Animal.__kinds     #self.__kinds则是实例私有属性
    
    def get_info(self):
        return 'name = {}, age = {}, localtion = {}'.format(self.__name, self.__age, self.__localtion)

dog = Animal('wangwang', 1, 'GuangDong')
print dog.get_name()
print dog.get_age()
print dog.get_localtion()
print dog.get_kind()
print dog.get_info()
'''
在上面的定义,name是实例的私有属性,从外部是无法访问的,而get_name(self) 就是一个实例方法,在实例方法里面是可以操作私有属性的,注意,它的第一个参数是self。
另外,__init__(self, name)其实也可看做是一个特殊的实例方法。
注意,在外部调用实例方法时,是不需要显式传递self参数的。
另外,通过定义实例方法来操作私有属性的这种方法是推荐的,这种数据封装的形式除了能保护内部数据一致性外,还可以简化外部调用的难度。
'''

'''定义类方法
1、类方法需要使用@classmethod来标记为类方法,否则定义的还是实例方法
2、类方法的第一个参数将传入类本身,通常将参数名命名为 cls,下面的 cls.__count 实际上相当于Animal.__count。
此外,因为是在类上调用,而非实例上调用,因此类方法无法获得任何实例变量,只能获得类的引用。
'''
class Animal():
    __count = 10
    def __init__(self,name,age):
        self.name = name
        self.age = age
    
    @classmethod
    def set_count(cls,count):
    	cls.__count = count
    	    
    @classmethod
    def get_count(cls):
        return cls.__count

print Animal.get_count()



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值