python学习--类、模块、包

面向对象编程思想

类:把共同属性抽象出来
对象:把类实例化,设置各自的属性

类的特点

封装 继承 多态

类的定义

  • 创建一个类后,可以通过类名访问其属性和方法。
  • 定义了构造方法后,类的实例化操作会自动调用它。
  • 可以没有构造方法,但必须有set方法初始化。
  • self表示实例对象,代表类的实例,不是类。
class Person1(object):#类的定义
    def __init__(self,name,sex):#__init__初始化
        self.name = name
        self.sex = sex
    """
    def set_person(self,name,sex):#set初始化
        self.name = name
        self.sex =sex
    """
    def get_name(self):
        return self.name
    def get_sex(self):
        return self.sex

if __name__ =='__main__':
    # 类的实例化1
    person11 = Person1('ming','male')
    # 类的实例化2
    """
    person1 = Person1()
    person1.set_person('GALA','male')
    """
    print(person11.name)  # 访问实例的属性
    print(person11.get_name())   #通过访问类中的方法

类的变量

  • 类变量
    在多个实例中共享数据

  • 实例变量
    只作用在此实例中

class Person(object):#类的定义
    total_Person =0 #类变量
    def __init__(self,name,sex):#构造方法
        self.name = name
        self.sex = sex
        self.total_Person+=1 #实例变量
        Person.total_Person +=1#类变量

    person1 = Person('GALA','male')#类的实例化

    print(Person.total_Person)  #通过类名访问类中定义的属性
    print(person1.name)  # 访问实例的属性
    print(person1.get_name())   #通过访问类中的方法
    print(person1.sex_ch())

    person2 = Person('ming','male')
    print(person2.total_Person)

实例的变量,与类中定义的不一样

类的方法

类中的方法

类的方法必须包含参数self,且是第一个参数。

    def get_name(self):
        return self.name
    def sex_ch(self):
        if self.sex == 'male':
            return 'nan'

类方法

@classmethod类方法

  • 不用通过实例化类就能访问的方法。
  • @classmethod 装饰的方法不能使用实例属性,只能是类属性。
  • 它主要使用在和类进行交互,但不和其实例进行交互的函数方法上。
  • 类方法第一个参数要默认传类,cls
    @classmethod#类方法
    def set_new_name(cls,new_name):
        return 'nn:'+new_name
#调用类方法
    print(Stud.set_new_name('Beichuan'))#被类调用
    print(per3.set_new_name('beichuan'))#被实例调用

静态方法

@staticmethod 静态方法

  • @staticmethod 修饰的方法是放在类外的函数,我们为了方便将他移动到了类里面,它对类的运行无影响。
  • 静态方法对参数没有要求,希望共享某些变量,不想每次实例化
@staticmethod #静态方法
def get_new_sex(new_sex):
    return 'ns:'+new_sex
#调用静态方法
    print(Stud.get_new_sex('fe'))#被类调用
    print(per3.get_new_sex('rf'))#被实例调用

实例方法

  • @property 将类方法转换为只读属性
  • 实例方法只能被实例对象调用
  • 实例方法,第一个参数必须默认传实例对象,self
@property#实例方法
def set_new_age(self):
    return 'na'
#调用实例方法
    print(per3.set_new_age)
  • 静态方法和类方法都可以被类或类的实例对象调用
  • 实例方法只能被实例对象调用

类的继承

类与类之间有一些公共的属性和方法,这时我就可以把相同的属性和方法作为基类的成员,而特殊的方法及属性则在本类中定义。

子类的定义

class Stud(Person):
	初始化方法
		初始化父类中的变量
		初始化新属性
class Stud(Person):
    def __init__(self,name,sex,age,ab):
        #super(Stud.self).__init__(name,sex)#初始化父类的方法1
        Person.__init__(self,name,sex)#初始化父类方法2
        self.age = age

覆写父类的方法

  • 调用方法
    先调用子类中有的方法,子类没有调用父类的
  • 多继承
    方法从低到高找(子类,父类,爷爷类),从左往右找(class1,class2)。
class Person(object):#类的定义
    total_Person =0 #类变量
    def __init__(self,name,sex):#构造方法
        self.name = name
        self.sex = sex
        self.total_Person+=1 #实例变量
        Person.total_Person +=1#类变量
    def get_name(self):
        return self.name
    def sex_ch(self):
        if self.sex == 'male':
            return 'nan'
class Hun(object):
    def __init__(self,eat):
        self.eat = eat

class Stud(Person,Hun):
    def __init__(self,name,sex,age,eat,ab):
       # super(Stud,self).__init__(name,sex)#初始化父类的方法1
        Person.__init__(self,name,sex)#初始化父类方法2
        Hun.__init__(self,eat)
        self.age = age
        self.__ab = ab #私有变量

    def sex_ch(self):#覆写父类方法
        return 'game'

    per3 = Stud('Bo','male','18','a','私有变量')
    print(per3.sex_ch())#调用方法
    print(Stud.total_Person)#调用父类属性

私有化

  • 双下划线开头命名:声明该变量/方法为私有,无法在类的外部被使用和访问
  • 在内部使用self.访问。
  • 外部通过“ _类名__xx ”可以访问到属性的值。
class Hun(object):
    def __init__(self,ab):
        self.__ab = ab#初始化私有变量
    def get_ab(self):#访问私有变量
        return self.__ab

if __name__ =='__main__':
    p = Hun('a')

    print(p.get_ab())#成功
    print(p._Hun__ab)#成功
    print(p.__ab)#失败

下划线相关变量命名

  • 单下划线开头命名:潜规则认为最好不要修改的变量。
  • 双下划线开头结尾:系统自定义名字,不建议占用。

模块

模块,在Python可理解为对应一个.py文件。在其他需要这些功能的文件中,导入import这模块,就可重用这些函数和变量。

  • 包是一个有层次的文件目录结构,它定义了由n个模块或n个子包组成的python应用程序执行环境。
  • 包是一个包含__init__.py 文件的目录,该目录下一定得有这个__init__.py文件和其它模块或子包。
  • 通常包总是一个目录,可以使用import导入包,或者from + import来导入包中的部分模块。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值