18、创建类

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__方法后,简化了代码


posted @ 2020-02-18 18:32  步行-天下  阅读(202)  评论(0)    收藏  举报