一类和对象
类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。
类具有属性,是对象状态的抽象;类具有操作,是对象行为的抽象;类是模子,定义的对象拥有共同的特征和行为,即属性和方法。类是对象的类型,对象是类的实例。
对象是一个能看得到,摸的着的具象实体。
1 类的定义
语法:
class 类名:
类成员(包括属性和方法)
这里的属性 官方语言叫做 类变量,属于这个类的公用部分,谁都可以来用,所以通常不作为实例变量使用,就是一个符号。而方法,则是在类中定义的函数,可以理解为类的行为部分。
实例化:通过类创建出一个对象,叫做实例化一个类。这里创建出的对象,官方语言是:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。、
举例:
# 类的构造方法和初始化方法
class Person:
def test(self):
print("这是test方法")
#self指当前对象
def seyhello(self):
print("姓名:",self.name)
#生成一个tom对象
tom=Person()#默认调用了类中的构造方法和初始化方法
tom.test()
tom.name="Tom"
#Python可以单独给对象写属性java不可以,是对象属性,不具有通用性
tom.seyhello()
输出结果:
这是test方法
姓名: Tom
这个代码定义了类Person的实例对象tom,然后调用tom的test()方法,显示打印内容。
self参数
代表实例参数本身,即当前类的实例对象,self作为类方法定义的第一个参数是隐含参数,调用方法是不需要传入实参。当要访问类实例对象的属性时,可以使用self.属性访问。构造方法
__init__(self,属性名):
创建新对象时,系统会自动调用构造方法,传入新创建的对象,可以为对象的属性赋予初始值。
class Person():
pCount=0
def __init__(self,name,sex,age):self.name = name
self.sex = sex
self.age = age
Person.pCount+=1def hello(self):
print("姓名:{0},性别:{1},年龄:{2}".format(self.name,self.sex,self.age))
#初始化方法
zhangsan=Person("张三","男",20)
zhangsan.hello()
zhangsan.name='lisi'
zhangsan.hello()
#self指当前对象
输出结果:
姓名:张三,性别:男,年龄:20
姓名:lisi,性别:男,年龄:20
2 类属性和实例属性
属性分为:类属性和实例属性。
类属性是与类绑定的,不依赖于对象,又称静态属性。不需要实例化对象,类和对象都可以访问获取其值。如:pCount,在任何地方想要访问,都可以使用Person.pCount访问。tom是Person的实例对象,可以使用tom.pCount访问。
实例属性存在于对象中,需要先创建对象,再访问获取其值,且每一个不同的对象都有属于自己的实例属性值。前例中,name,sex,age是实例属性。
python允许在任何时候添加,修改,或删除类和对象的属性,使用赋值运算符可以为类对象添加,修改。
eg:Person.pCount=2 是对类属性进行修改。tom.pCount也会改变。
tom.pCount=1 是赋值操作, Person.pCount不会改变。
使用del语句可以删除类对象的属性,语法:
del 类名.属性名
3 方法
类中定义方法有3中:类方法,实例方法,静态方法
类方法:
语法: #与类绑定,不依赖于对象
@classmethod
类方法名(cls,参数列表)
方法代码
@classmethod 表示下面的方法是类方法 将类本身作为对象进行操作的方法
注意 :必须至少有一个参数 cls 来代替 self 其余自定义 ,cls表示当前类,调用时不需要传入参数
类方法中,只能使用类属性,不能使用实例属性。
实例方法
与类绑定,且依赖于对象。再类中声明定义,需创建对象,在调用执行。
静态方法
静态方法与类方法区别:在某些应用场合需要cls参数时,只能使用类方法,不需要时,两者是通用的。
语法:
@staticmethod
类方法名()
方法代码
举例:
class Test:
def test(self):
print('test....')
@classmethod
def classMethod(cls):
print('cls类')
@staticmethod
def staticMethod():
print('静态')
Test.classmethod() #类成员
t=Test()
t.test() #对象成员
输出结果:
cls类
test....