Python学习笔记

绑定方法与非绑定方法

在类的绑定方法的参数列表中有self参数,非绑定方法的参数列表中没有self参数
使用对象调用非绑定方法会出错,使用类调用绑定方法也会出错
a=A()是实例化对象
a=A 是给类A加了一个别名a,或者说又加了一个标签a`

>>> class A:
	def print():
		print("sadfad")
	def print2(self):
		print("adfag")
>>> a=A()
>>> a.print()
Traceback (most recent call last):
  File "", line 1, in <module>
    a.print()
TypeError: print() takes 0 positional arguments but 1 was given
>>> a.print2()
adfag
>>> A.print()
sadfad
>>> A.print2()
Traceback (most recent call last):
  File "", line 1, in <module>
    A.print2()
TypeError: print2() missing 1 required positional argument: 'self'
>>> a=A
>>> a.print()
sadfad
>>> a.print2()
Traceback (most recent call last):
  File "", line 1, in <module>
    a.print2()
TypeError: print2() missing 1 required positional argument: 'self'

类方法

使用@classmethod修饰,可以直接使用A.bar()形式调用,第一个参数为这个类

class Foo:
	lang="Java"
	def __init__(self):
		self.lang="python"
	@classmethod
	def get_class_attr(cls):
		return cls.lang
print(Foo.lang)
r=Foo.get_class_attr()			#Foo作为参数cls被自动传入
print("get class attribute:",r)
f=Foo()
print("instance attribute:",f.lang)

装饰器

@property
@staticmethod
@classmethod

__slots__定义的属性略类似于C++/JAVA中的静态变量,但是如果类未对属性赋值,实例可以在自己作用域内定义一个同名属性
此外,使用__slots__之后如果希望对实例新建一个变量,只能对类进行操作,不可以直接对实例进行添加

r表示原始字符串

你可能感兴趣的:(Python学习笔记)