The Seven Year Itch.

MENU

Python中我刚知道的秘密

December 18, 2017 • Read: 236 • Python

class Student:

    def __init__(this, name, age):
        this.name = name
        '实例变量'
        this.age = age

    def get_student(this):
        print('姓名:{} 年龄:{}'.format(this.name, this.age))


student = Student('张三', 18)
student.get_student()

我一直以为,Python中类里构造函数和函数里的self都是固定的,不可以变动的,今天我才知道。原来这里的self都可以自定义,自己想叫啥名都可以。但是官方推荐还是用self!


一个函数中返回多个结果
以前一直不知道,用了最拙劣的方法,今天改正!

def get_number(num1,num2):
    num1 = num1 * 3
    num2 = num2 * 2
    return num1,num2

age1, age2 = get_number(1,3)
print(age1,age2)

之前一直在想一个问题,我要在一个函数中去循环一个列表或其他,该如何正确的返回呢?
现在找到了答案!

def _get(n):
    return n * 2


ss = [_get(i) for i in range(10)]
print(ss)

在实例方法中访问实例变量

class Student(object):

    sum = 0

    def __init__(self):
        self.__class__.sum += 1 # 调用类变量
        print(self.__class__.sum)

    def get_user(self):
        self.__class__.num # 调用类变量


student = Student()
student1 = Student()
student2 = Student()

super作用

"""
super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,
但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
总之前人留下的经验就是:保持一致性。要不全部用类名调用父类,要不就全部用 super,不要一半一半。
"""

class Base:
    def __init__(self):
        print("Create OK")

class A(Base):
    """docstring for A."""
    def __init__(self):
        super(A, self).__init__() # super的用处
        print("1")

class B(Base):
    """docstring for B."""
    def __init__(self):
        Base.__init__(self)
        print("2")

base = Base()
a = A()
b = B()

if __name__ == '__main__':
    print(a,b)

定义类方法

class A:
    sum = 0

    @classmethod # 定义类方法
    def plus(cls): # cls 名字一样可以随意更改
        cls.sum += 1
        print(cls.sum)


a = A()
a.plus()

为什么在python的类中,带有双下划线的函数是私有的,但"__init__"却不是私有的呢?原因很简单,"__init__"不仅前面有两个双下划线,后面还有两个,所以python就知道那个是私有那个是公开的了。

Tags: None
Archives QR Code
QR Code for this page
Tipping QR Code