为什么要有面向对象?简单来说就是管理数据。
为什么管理数据?追溯到源头,任何的东西都会有一个"属性"(特征:通常可以用数据来表示)
1)"属性"(特征:通常可以用数据来表示)(类变量和实例变量)
2)可以做一些动作(方法)
为什么要用类?因为任何东西都有以上两种特征
类来管理对象的数据。
属性:类变量和实例变量(私有变量)
方法:
1)实例方法
2)类方法
3)静态方法
专有数据(可以存储,和对外使用)
和方法(用于操作转悠数据的),实现操作数据的规则。
实现的本质:就是把一组数据放进实例里面去操作管理
无专有数据,谁给他传值都可以处理,并返回
本身不能存储数据
class compute():
def __init__(self,a,b):
self.a = a
self.b = b
def add(self):
return self.a+self.b
def add(a,b):
return a+b
print(add(1,2)) #取函数中的方法,临时计算不存储
c=compute(1,2) #类中的实例化
print(c.add()) #调用类中的方法
print(c.a) #调用类中存储的变量a的"值"
print(c.b) #调用类中存储的变量b的"值"
print(c.a+1) #可以在存储的”值” +1
print(c.a+2) #可以在存储的”值” +1
c.a+=1 #可以改变变量的"值",重新赋一个"值"
c.b+=1
print(c.a)
print(c.b)
类:作为一个整体
把一组相关数据放到类的实例里面,进行存储,计算(操作)等:
实现安全性、独立性,规则的操作统一。
"""
1)实例方法
2)类方法
3)静态方法
"""
class Person():
def __init__(self,name,gender):
self.name = name
self.gender = gender
def get_name(self):
return self.name
print(Preson.get_name())
返回
D:\>py b.py
Traceback (most recent call last):
File "b.py", line 14, in <module>
print(Person.get_name())
TypeError: get_name() missing 1 required positional argument: 'self'
"""
没有做实例化,只是使用类名调用这个方法get_name,
这个时候用类名调用方法类的所有信息都会存在内存里面,
然后使用类名去找这个方法,肯定能找到,在执行这个方法的时候,
有个参数self(get_name(self)),执行这个方法的时候去找这个self的值,
然后发现这个Preson.get_name()没有self,因为self代表实例的地址,
但是调用这个方法的是类名,不是实例名字,所有方法中的self就找不到
实例的数据,从而无法调用里面的方法
"""
class Person():
def __init__(self,name,gender):
self.name = name
self.gender = gender
def get_name(self): #实例方法,必须要实例化
return self.name
第一种写法:
print(Person("wulaoshi","man").get_name()) #连写,只能使用一次
第二种写法:
wulaoshi = Person("wulaoshi","man") #实例化
print(wulaoshi.get_name())
"""
1)实例方法
2)类方法
3)静态方法
"""
class Person():
count = 0 #类变量
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
def get_name(self):
return self.name
def get_isinstance_count(cls): #类方法
return Person.count
#print(Person("wulaoshi","man").get_name())
#wulaoshi = Person("wulaoshi","man")
#print(wulaoshi.get_name())
Person("wulaoshi","man")
print(Person.count)
"""
没有做实例化,只是使用类名调用这个方法get_name,
这个时候用类名调用方法类的所有信息都会存在内存里面,
然后使用类名去找这个方法,肯定能找到,在执行这个方法的时候,
有个参数self(get_name(self)),执行这个方法的时候去找这个self的值,
然后发现这个Preson.get_name()没有self,因为self代表实例的地址,
但是调用这个方法的是类名,不是实例名字,所有方法中的self就找不到
实例的数据,从而无法调用里面的方法
"""