1、类
'''
设计类
类名:见名之意,首字母大写,其他遵循驼峰原则
属性:见名之意,其他遵循驼峰原则
行为(方法/功能):见名之意,其他遵循驼峰原则
'''
'''
创建类:
类:一种数据类型,本身并不占内存空间,跟所学过的number,string,boolean等类似,用类创建实例对象(变量),对象占内存空间
格式:
class 类名(父类列表):
属性:
行为:
'''
#object :基类,超类,所有类的父类,一般没有合适的父类就写object
class Person(object):
#定义属性
name = ""
age = 0
height = 0
weight = 0
#定义方法(定义函数)
#注意:方法的参数必须以self当第一个参数
#self 代表类的实例(某个对象)
def run(self):
print("run")
def eat(self, food):
print("eat" + food)
------------------------------------
2、使用类实例化对象
class Person(object):
#定义属性
name = ""
age = 0
height = 0
weight = 0
#定义方法(定义函数)
#注意:方法的参数必须以self当第一个参数
#self 代表类的实例(某个对象)
def run(self):
print("run")
def eat(self, food):
print("eat" + food)
def openDoor(self):
print("我已经打开了冰箱门")
def fillEle(self):
print("我已经把大象装进冰箱了")
def closeDoor(self):
print("我已经关闭了冰箱门")
'''
实例化对象
格式: 对象名 = 类名(参数列表)
注意:没有参数,小括号也不能省略
'''
#实例化一个对象
per1 = Person()
print(per1)
print(type(per1))
print(id(per1))
per2 = Person()
print(per2)
print(type(per2))
print(id(per2))
--------------------------
3、访问对象的属性与方法
class Person(object):
# 定义属性
name = ""
age = 0
height = 0
weight = 0
# 定义方法(定义函数)
# 注意:方法的参数必须以self当第一个参数
# self 代表类的实例(某个对象)
def run(self):
print("run")
def eat(self, food):
print("eat " + food)
def openDoor(self):
print("我已经打开了冰箱门")
def fillEle(self):
print("我已经把大象装进冰箱了")
def closeDoor(self):
print("我已经关闭了冰箱门")
per = Person()
'''
访问属性:
格式:对象名.属性名
赋值:对象名,属性名 = 新值
'''
per.name = "tom"
per.age = 18
per.height = 160
per.weight = 80
print(per.name,per.age,per.height,per.weight)
'''
访问方法
格式:对象名.方法名(参数列表)
'''
per.openDoor()
per.fillEle()
per.closeDoor()
per.eat("apple")
#问题:目前来看Person创建的所有对象属性都是一样的
per2 = Person()
------------------------------
4、对象的初始状态(构建函数)
class Person(object):
# 定义属性
name = ""
age = 0
height = 0
weight = 0
# 定义方法(定义函数)
# 注意:方法的参数必须以self当第一个参数
# self 代表类的实例(某个对象)
def run(self):
print("run")
def eat(self, food):
print("eat " + food)
def openDoor(self):
print("我已经打开了冰箱门")
def fillEle(self):
print("我已经把大象装进冰箱了")
def closeDoor(self):
print("我已经关闭了冰箱门")
def __init__(self, name, age, height, weight):
# print(name, age, height,weight)
self.name = name
self.age = age
self.height = height
self.weight = weight
# print("这里是init")
per = Person("hanmeimei", 20, 150, 80)
print(per.name, per.age)
per2 = Person("lilei", 21, 160, 90)
print(per2.name, per2.age)
per.run()
'''
构造函数:__init__() 在使用类创建对象的时候自动调用
注意:如果不显示的写出构造函数,默认会自动添加一个空的构造函数
'''
---------------------------
5、self
'''
self 代表类的实例,而非类
那个对象调用方法,那么该方法中的self就代表那个对象
self.__class__ 代表类名
self 不是关键字,换成其他的标识符也是可以的
'''
class Person(object):
def run(self):
print("run")
print(self.__class__)
p = self.__class__("tt", 30, 10, 30)
print(p)
def eat(self, food):
print("eat " + food)
def say(self):
print("Hello! my name is %s, I am %d years old" % (self.name, self.age))
def openDoor(self):
print("我已经打开了冰箱门")
def fillEle(self):
print("我已经把大象装进冰箱了")
def closeDoor(self):
print("我已经关闭了冰箱门")
def __init__(self, name, age, height, weight):
self.name = name
self.age = age
self.height = height
self.weight = weight
per1 = Person("tom", 20, 160, 80 )
per1.say()
per2 = Person("han", 20, 160, 80 )
per2.say()
per1.run()
-----------------------------------------
'''
重写:将函数重写定义写一遍
__str__():在调用print打印对象时自动调用,是给用户用的,是一个描述对象的方法
__repr__():是给机器用的,在Python解释器里面直接敲对象名在回车后调用的方法
注意:在没有str时,且有rept,str=rept
'''
class Person(object):
def __init__(self, name, age, height, weight):
# print(name, age, height,weight)
self.name = name
self.age = age
self.height = height
self.weight = weight
# print("这里是init")
def __str__(self):
# return "这里是str"
return "%s-%d-%d" % (self.name, self.age, self.height)
per = Person("hanmeimei", 20, 150, 80)
print(per.name, per.age)
print(per)
print(per)
print("hell" * 3)
#优点:当一个对象的属性值很多,并且都需要打印,重写了__str__方法后,简化了代码