-
改了之后就无法通过类去访问了,只能通过实例去访问。
查看全部 -
Python 定义了__str()__和__repr__()两种方法,__str()__用于显示给用户,而__repr__()用于显示给开发人员,当使用str()时,实际调用的是__str__()方法,而直接输入变量,调用的是__repr__()方法。
class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __str__(self): return 'name: {}, gender: {}'.format(self.name, self.gender) def __repr__(self): return 'name: {}, gender: {}'.format(self.name, self.gender) bob = Person('Bob', 'Male') str(bob) # ==> 'name: Bob, gender: Male' >>> bob 'name: Bob, gender: Male'
查看全部 -
要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了。
查看全部 -
在一条继承链上,一个实例可以看成它本身的类型,也可以看成它父类的类型。
isinstance也可以用于Python自有数据类型的判断。
查看全部 -
通过函数isinstance()可以判断一个变量的类型。
查看全部 -
私有属性以双下划线__开头,私有属性只能在当前函数中被调用,不能被外部的函数调用。
查看全部 -
不要通过实例来修改类属性
查看全部 -
学了大半天,把__init__(self)写成了__int__(self),运行了大半天,始终报错,唉~~~
查看全部 -
class Peple(object): pass
xiaoming = Peple()
xiaomai = Peple()
类,这是区别于其它的运算符,如果没有定义类的前提下,xiaoming == xiaomai ,这个等式是相等的;当创建了类以后,我们进行实例化后,xiaoming != xiaomai,这个等式就不成立了。这是类的最大区别;每创建一个实例,它们都归属于这个类的不同实例,不相等;
查看全部 -
不能被外部访问的属性称为私有属性。私有属性是以双下划线'__'开头的属性。 # 类私有属性 class Animal(object): __localtion = 'Asia' print(Animal.__localtion) Traceback (most recent call last): File "", line 1, in AttributeError: type object 'Animal' has no attribute '__localtion'查看全部
-
定义类属性可以直接在 class 中定义,比如在前面的Animal类中,加入地域的类属性:
class Animal(object): localtion = 'Asia' def __init__(self, name, age): self.name = name self.age = age
类属性也是可以动态添加和修改的,需要注意的是,因为类属性只有一份,所以改变了,所有实例可以访问到的类属性都会变更:
Animal.localtion = 'Africa' print(cat.localtion) # ==>Africa print(dog.localtion) # ==>Africa
查看全部 -
[::-1] 表示将字符串倒过来查看全部
-
尽量不要通过实例来修改类属性,否则很容易引发意想不到的错误。查看全部
-
@log('DEBUG') def my_func(): pass
把上面的定义翻译成高阶函数的调用,就是:
my_func = log('DEBUG')(my_func)
上面的语句看上去还是比较绕,再展开一下:
log_decorator = log('DEBUG') my_func = log_decorator(my_func)
上面的语句又相当于:
log_decorator = log('DEBUG') @log_decorator def my_func(): pass
查看全部 -
Python的 decorator 本质上就是一个高阶函数,它接收一个函数作为参数,然后,返回一个新函数。
使用 decorator 用Python提供的 @ 语法,这样可以避免手动编写 f = decorate(f) 这样的代码。
考察一个@log的定义:def log(f): def fn(x): print('call ' + f.__name__ + '()...') return f(x) return fn
对于阶乘函数,@log工作得很好:
@log def factorial(n): return reduce(lambda x,y: x*y, range(1, n+1)) print(factorial(10))
要让 @log 自适应任何参数定义的函数,可以利用Python的 args 和 *kwargs,保证任意个数的参数总是能正常调用:
def log(f): def fn(*args, **kwargs): print('call ' + f.__name__ + '()...') return f(*args, **kwargs) return fn
查看全部
举报