一、类的定义
1.类=属性+方法,其中属性分为两种:类属性、实例属性
class Car():
place = 'china'
def made(self):
self.name='奔驰'
print(Car.place)#类属性可以通过类名直接调用
#print(Car.name)#不能这么写,因为实例属性在方法内定义,不能通过类名直接调用,必须先创建对象,再通过对象调用方法,然后调用方法中的属性
a=Car()#先创建对象
a.made()#对用方法
print(a.name)#调用方法中的实例属性
注意:
1.类属性是类所有对象共有的一个属性,可以通过类或者对象访问。而实例属性每个对象都拥有一个。
2.类属性可以通过类名直接调用,实例属性在方法内定义,不能通过类名直接调用,必须先创建对象,再通过对象调用方法,然后调用方法中的属性。
3.类方法中第一个参数必须是self,self代表的是类的实例化对象
4.必须用class定义类
2.类变量不会被实例对象改变的,必须通过类方法改变
class Jingtai(object):
Count = 0
Ja1 = Jingtai()
Ja2 = Jingtai()
Ja2.Count = 1
print(Ja2.Count,Ja1.Count)
class Jingtai(object):
Count = 0
def c(self):
self.Count=2
return self.Count
Ja1 = Jingtai()
Ja2 = Jingtai()
Ja2.Count = 1
print(Ja2.Count,Ja1.Count)
print(Ja1.c())
print(Ja1.Count)
二、构造函数__init__():
1.因为实例属性在方法中定义,调用时不方便,因此定义了构造函数,在构造函数中定义的属性都称为实例属性,调用时创建对象,直接用对象.属性名调用即可,因为在创建对象时,自动将对象传给self
class Car():
place = 'china'
def __init__(self):
self.name='奔驰'
def made(self):
self.name='奔驰,宝马'
print(Car.place)
a=Car()#先创建对象
print(a.name)
a.made()
print(a.name)
三、私有属性和方法
1.在方法名或者变量名前用__定义,则变为私有,无法在类的外部直接访问,但是可以通过类的方法去访问该私有变量的值
class Student():
def __init__(self, name, score):
self.__name = name#私有属性
self.__score = score#私有属性
def __print_score(self):#私有方法
print('%s: %s' % (self.__name, self.__score))
def change_name(self):
self.__print_score()
return self.__name
b = Student('Bart Simpson', 98)
print(b.change_name())
四、静态属性(类属性)和方法
1、静态变量和静态方法都属于类的静态成员,它们与普通的成员变量和成员方法不同,静态变量和静态方法只属于定义它们的类,而不属于某一个对象。
2、静态变量和静态方法都可以通过类名和对象进行访问。
3.其中,静态属性就是类属性
4..静态方法:需要通过修饰器@staticmethod
来进行修饰,静态方法不需要多定义参数
5.如果一个类的方法在定义的时候,既 不需要 访问 实例属性 或者调用 实例方法,也 不需要 访问 类属性 或者调用 类方法,可以将其定义为静态方法。
6.静态方法由类调用
class Car():
place='杭州'
@staticmethod
def show_help():
print("查找汽车信息")
五、类方法
1.是类所拥有的方法,用@classmethod
来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls
作为第一个参数,也可以有别的参数。但是第一个必须是类对象。
2.类方法跟普通的方法区别就是可以直接通过类名.方法名的方式调用
class People():
country = 'china'
#类方法,用classmethod来进行修饰,跟普通的方法区别就是可以直接通过类名.方法名的方式调用
@classmethod
def getCountry(cls):
return cls.country
六、类的继承
1必须用super().__init__(),去继承父类的属性
>>> class parent():
def __init__(self,name,age,tall):
self.name=name
self.age=age
self.tall=tall
>>> class child(parent):
def __init__(self,name,age,tall):
super().__init__(name,age,tall)
>>> A=child('zzz',16,180)
>>> A.name
'zzz'
>>> A.age
16
>>> A.tall
180
七、注意事项
1.若属性定义了初始值,则不用再提供形参:
>>> class Dog():
def __init__(self,name,color):
self.name=name
self.color=color
self.age=6
2.python中不支持方法的重载:即方法名相同,参数类型(参数个数不同)不同的函数,支持子类对父类方法的重写
3.导入模块的三种方法:
import math
import math as m
from math import sqrt