标签:ini 实例 对象 -- 问题 turn pre 面向对象设计 return
对象和类
对象是什么?
在面向对象编程中,对象大致意味着一系列数据(属性)以及一套访问和操作这些数据的方法。
对象:类的实例
类是什么?
类即类别、种类,是面向对象设计最重要的概念。
类:一种对象,每个对象都属于特定的类。
问题1:先有类还是先有对象?
先有的一个个具体存在的对象(比如一个具体存在的人),还是先有的人类这个概念,这个问题需要分两种情况去看
创建自定义类
在Python中程序中的类:
因而类中最常见的无非是:变量和函数的定义
一个简单的示例:
class Person: def set_name(self,name): self.name=name def get_name(self): return self.name def greet(self): print("hello,world! I am {}".format(self.name)) #创建两个实例 foo=Person() bar=Person() foo.set_name("Lucy") bar.set_name("Jessie") foo.greet() bar.greet() #输出 hello,world! I am Lucy hello,world! I am Jessie
从上面示例不难看出:
实际上,可以随便给这个参数命名,但鉴于它总是指向对象本身,因此习惯上将其命名为self。
类的使用
class OldboyStudent: school=‘oldboy‘ def learn(self): print(‘is learning‘) def eat(self): print(‘is eating‘) def sleep(self): print(‘is sleeping‘)
1、引用类的属性
OldboyStudent.school #查 OldboyStudent.school=‘Oldboy‘ #改 OldboyStudent.x=1 #增 del OldboyStudent.x #删
2、调用类
s1=OldboyStudent() s2=OldboyStudent() s3=OldboyStudent() #如此,s1、s2、s3都一样了,而这三者除了相似的属性之外还各种不同的属性,这就用到了__init__
3、__init__方法
#注意:该方法是在对象产生之后才会执行,只用来为对象进行初始化操作,可以有任意代码,但一定不能有返回值 class OldboyStudent: ...... def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex ...... s1=OldboyStudent(‘李坦克‘,‘男‘,18) #先调用类产生空对象s1,然后调用OldboyStudent.__init__(s1,‘李坦克‘,‘男‘,18) s2=OldboyStudent(‘王大炮‘,‘女‘,38) s3=OldboyStudent(‘牛榴弹‘,‘男‘,78)
1、查看对象的名称空间
#执行__init__,s1.name=‘牛榴弹‘,很明显也会产生对象的名称空间可以用s2.__dict__查看,查看结果为 print(s2.__dict__) {‘name‘: ‘王大炮‘, ‘age‘: ‘女‘, ‘sex‘: 38}
2、对象的属性
s2.name #查,等同于s2.__dict__[‘name‘] s2.name=‘王三炮‘ #改,等同于s2.__dict__[‘name‘]=‘王三炮‘ s2.course=‘python‘ #增,等同于s2.__dict__[‘course‘]=‘python‘ del s2.course #删,等同于s2.__dict__.pop(‘course‘)
函数 V.S 方法
方法(关联方法)将其第一个参数关联到它所属的实例,因此无需提供这个参数。当然可以将属性关联到一个普通函数,但这样就没有特殊的self参数了
举个例子:
1、类属性关联到函数:
class Class:
def method(self):
print("I have a self")
def function():
print("I don‘t have self...")
instance=Class()
instance.method()
#输出结果
I have a self
instance.method=function
instance.method()
#输出结果
I don‘t have self...
注意:有没有参数self并不取决于instance.method的调用方法
2、让另一个变量指向同一个方法
class Class:
def method(self):
print("I have a self")
def function():
print("I don‘t have self...")
instance=Class()
ins=instance.method
ins()
#输出结果
I have a self
虽然最后一个方法调用起来看起来像函数调用,但变量ins指向的是关联的方法instance.method,这意味着它也能够访问参数self(即它也被关联到类的实例)
Mark on 2018.04.12
标签:ini 实例 对象 -- 问题 turn pre 面向对象设计 return
原文地址:https://www.cnblogs.com/JunSheep/p/8809562.html