关于python中类与方法的创建在格式上是和java类似的我们可以对应着那个来学这个。
构造函数和析构函数:
class Car:
def __init__(self, number):
print("My number is {}".format(number))
def __del__(self):
print("I am destroyed!")
Car("23333")
运行结果:
解释:和java中一样,在自定义一个类之前都是用class关键字来声明一个类,在Python中初始化和析构函数有固定的函数名:"_init_" 和 "_del_ ", 而且二者的第一个参数都应该是一个指向实例本身的self参数,后边可以加我们需要的参数,在这里self参数是不需要人为传入的,Python会在调用实例方法的时候自动传入self参数。self是用来干嘛的?self参数是调用这个实例方法的实例本身的引用,即哪个对象调用了带有self参数的方法,self就会指代谁。
类的属性:
class Car:
count = 0
def __init__(self, number):
Car.count += 1
self.number = number
print("My number is {}".format(number))
def __del__(self):
self.__class__.count -= 1
print("I am destroyed! My number is {}".format(self.number))
print(Car.count)
a1 = Car("1122")
print(Car.count)
a2 = Car("2233")
print(Car.count)
运行结果:
解释:在Python中属性分为两种:类属性和实例属性;区别:“类属性”在该类及其所有的实例中是共享的;而“实例属性”在实例之间不共享,每个实例都拥有一个属于实例本身的“实例属性”,在上边的这段程序中count就相当于类属性,number相当于实例属性,其中无论实在类外还是类内,通过“类名.类属性名”即可使用这个类的类属性,但是唯独在析构函数中不可以这么用,在析构函数中我们需要通过“self._class_.类属性名”的方式来访问类属性。
“self.number=number” :使用初始化函数的参数number的值为实例属性number初始化,这样我们就可在析构的时候再次输出它了。
类的方法(方法”就是指在类中定义的函数):
Python中类分为三种:“实例方法”,“静态方法”,“类方法”
实例方法:
“实例方法”是类的实例所特有的方法,实例方法只能通过实例的引用进行调用,并且在实例方法中可以通过self参数直接访问调用该方法的实例本身,上边有用到。
静态方法:
“静态方法”既可以通过各类名进行调用,也可以通过实例的引用进行调用。在Python中,静态方法在声明时需要使用修饰器“@staticmethod”修饰,就是在函数声明的上一行中添加修饰器;同时,“静态方法”中不需要传入self参数,因此我们无法直接获取调用静态方法的对象的引用。
class cal:
@staticmethod
def add(x, y):
return x+y
print(cal.add(1,2))
运行结果:
类方法:
“类方法”也是既可以通过类名进行调用,也可以通过实例的引用进行调用。并且类方法需要传入一个参数(常命名为“cls”)作为调用该方法的类的引用,类似于类方法中的self,所以在这点上来看,类方法更像是实例方法,只不过它关注的不是调用该方法的对象而是类。Python中类方法需要使用修饰器“@classmethod”进行修饰。
class C:
name = "Say"
@classmethod
def foo(cls, content):
print("{} {}".format(cls.name, content))
C.foo("Hi!")
c = C()
c.foo("Bye!")
运行结果: