python 小记

python中调用方法时加括号与不加括号的区别 

def cal(data):
    return data + data


if __name__ == '__main__':
    print(cal(5))
    print(cal)
  • 不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成,返回对象地址

  • 带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果,返回函数执行结果

@classmethod:类方法

由类调用,最少要有一个参数cls,调用的时候这个参数不用传值,这个参数表示这个类自身,可以来调用类的属性、方法、实例化对象等

class Provice(object):
    country = '中国'

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

    def func1(self):
        print(self.name)

    @classmethod
    def show(cls):  
        print(cls.country)
        cls('zja', 12).func1()


Provice.show()

end 关键字 

关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符

# coding: utf-8
 
# 斐波纳契数列
a, b = 0, 1
while b < 1000:
    print(b, end=',')
    a, b = b, a+b

@log  

装饰器,在代码运行期间动态增加功能

# coding: utf-8


def log(func):
    def wrappaer(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)

    return wrappaer


# 装饰器
@log
def now():    #相当于执行了now = log(now)
    print('2018-08-22')


now()

类的继承

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Animal(object):
    def run(self):
        print('Animal is runnine')


class Dog(Animal):
    def run(self):
        print('Dog is running')


class Cat(Animal):
    def run(self):
        print('Cat is running')


class Duck(Animal):
    def run(self):
        print('Duck is running slowly')


def run_twice(animal):
    animal.run()
    animal.run()


dog = Dog()
dog.run()

cat = Cat()
cat.run()
b = Animal()
print(isinstance(b, Dog))
print(isinstance(cat, Cat))
run_twice(Animal())
run_twice(Dog())
run_twice(Duck())

类属性设置 

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Student(object):
    # __slots__ = ('name', 'age')  # 限制Student 实例的属性,只允许添加或修改name,age属性,仅对当前实例起作用,对继承的子类是不起作用的

    def __init__(self, name, age, score):
        self.name = name
        self.age = age
        self.score = score

    def print_score(self):
        print('%s: %s' % (self.name, self.score))

    # 实例调用的属性找不到的情况下 在 __getattr__中查找
    def __getattr__(self, item):
        if item == 'teacher':
            return '王王'
        raise AttributeError('\'Student\' object has no attribute \'%s\'' % item)


bart = Student('lll', 18, 60.4)
print(bart.name)
bart.print_score()
print(bart.teacher)
# print(bart.asc)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from types import MethodType


class Course(object):
    def __init__(self, cnmae, ctime):
        self.__cname = cnmae
        self.__ctime = ctime

    def print_score(self):
        print('%s: %s' % (self.__cname, self.__ctime))

    def get_name(self):
        return self.__cname

    def set_name(self, name):
        if len(name) > 0:
            self.__cname = name
        else:
            self.__cname = '大大'


def set_age(self, age):
    self.age = age


course = Course('英语课', 2)
# 给实例绑定方法   给一个实例绑定方法 对另一个实例不起作用
course.set_age = MethodType(set_age, course)
course.set_age(25)  # 调用实例方法
print('给实例绑定方法 %s' % (course.age))  # 测试结果

# 给class方法绑定方法
Course.set_age = set_age
course.set_age(100)
print('给class方法绑定方法 %s' % (course.age))

# 类属性前加上'__'之后,变为私有变量,只有内部可以访问
# print(course.__cname)
print(course.get_name())
course.print_score()
course.set_name('数学课')
print(course.get_name())

定制类

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Student(object):
    def __init__(self, name):
        self.name = name

    # 用于定制类
    def __str__(self):
        return 'Student object (name: %s)' % self.name

    __repr__ = __str__


# 未使用定制 <__main__.Student object at 0x01335C50>
# 定制之后的输出:Student object (name: XXX)
print(Student('XXX'))

class Chain(object):
    def __init__(self, path=''):
        self._path = path

    def __getattr__(self, path):  # 找不到类属性,执行此函数
        return Chain('%s/%s' % (self._path, path))

    def __call__(self):  # 直接对实例进行调用
        print('My path is %s' % self._path)

    def __str__(self):  # 定制类。输出时调用此接口
        return 'aaa\'s path is: %s' % self._path

    __repr = __str__


print(Chain().status.user.timeline.list)

枚举

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from enum import Enum, unique


class Student(object):
    def __init__(self, name):
        self.name = name

    # 定义 __call__()方法 直接对实例进行调用
    def __call__(self):
        print('My name is %s' % self.name)


s = Student('Michael')
s()

# 枚举类
Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', ))

# __members__,它包含了枚举类中的所有成员  一般情况下用于枚举类中有重复值的成员
for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

for data in Month:
    print(data.name, '=>', data, ',', data.value)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值