zoukankan      html  css  js  c++  java
  • Python基础到进阶之01类函数、实例函数和静态函数

    python是一门非常简单容易上手的语言,博主使用了一年多python,但是明确知道自己对python的很多特性还是不是非常了解,很多细节都没把握,甚至很多看不懂不知道的地方
    github上python100days项目 让我想再学一遍python,查缺补漏一下,此系列博客用来记录和分享



    #python中的类有三种方法,类方法,实例方法,和静态方法
    # 实例方法就是新建一个实例之后,可以调用的对象里的方法,这点和java、c等语言中类或者对象的方法非常类似,方法第一个参数为self
    # 类方法是指访问类属性的方法,默认第一个参数为cls,@classmethod
    # 静态方法没有第一个隐参,可以被直接调用,@staticmethod

    # 01静态方法
    class Person(object):

    # 限定Person对象只能绑定_name, _age和_gender属性,height无法动态绑定 去掉__slot__之后就可以绑定了
    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
    self._name = name
    self._age = age

    @property
    def name(self):
    return self._name

    @property
    def age(self):
    return self._age

    @age.setter
    def age(self, age):
    self._age = age

    def play(self):
    if self._age <= 16:
    print('%s正在玩飞行棋.' % self._name)
    else:
    print('%s正在玩斗地主.' % self._name)

    @staticmethod
    def printa():
    print("a")

    @classmethod
    def new(cls,age):
    return cls("xiaoliu",age)

    # 加装饰器的原因就是为了对于实例也可以调用这个fun,如果没加@staticmethod,不实例化可以调用printa但是实例之后无法调用
    # 因为实例需要fun中传入self
    @staticmethod
    def is_valid(a, b, c):
    return a + b > c and b + c > a and a + c > b

    if __name__ == '__main__':
    print(Person.is_valid(1, 2, 3))
    Person.printa()
    person = Person('xiaoliu',22)
    person.printa()
    # person._gender="famale"
    # person.height=168


    # 02 实例方法,第一个参数通常为self,表示实例相关信息的对象,实例对象可以调用实例方法,类不可以调用实例方法,因为需要实例化
    #可以调用
    person.play()
    #类不可以调用实例方法
    # Person.play()

    # 03 类方法,类方法的第一个参数约定名为cls,它代表的是当前类相关的信息的对象
    #类方法可以帮助生成类,例子中通过类方法直接确定人名是xiaoliu,年纪可以通过类方法设定,再新建出实例
    person2 = Person.new(52)
    print(person2.name, person2.age)

    person2.new(22)
    print(person2.name, person2.age)
    #类方法可以被类直接调用,也可以被实例对象直接调用,上述语句 person2.new(22) 没有报错就证明实例也可以调用类函数,但是xiaoliu的
    #年纪会变吗?答案是不会,因为返回的cls("xiaoliu",age)不会对应到某个实例

    person3= person2.new(22)
    print(person3.name, person3.age)
    # 这下person3的age会是多少呢,答案是22,因为返回的cls信息,用来实例化一个新的实例3
  • 相关阅读:
    商业智能领域需要了解的数据库优化理论
    动态监听与静态监听(转载)
    Oracle查看表结构的几种方法
    PLSQL Developer使用技巧整理
    Oracle数据库的三种验证机制
    EAV模型
    三门问题
    第一个python实例程序
    type()
    pi
  • 原文地址:https://www.cnblogs.com/CooperXia-847550730/p/11365871.html
Copyright © 2011-2022 走看看