python 是一门面向对象的语言
所谓的面向对象,就是在编程的时候尽可能的去模拟真实的现实世界,按照现实世界中的逻辑去处理问题,分析问题中参与其中的有哪些实体,这些实体应该有什么属性和方法,我们如何通过调用这些实体的属性和方法去解决问题

两种编程思想
面向过程
一种以过程为中心的编程思想
首先分析解决问题所需要的步骤,然后用函数将这些步骤一步一步的实现,然后按顺序依次调用运行

面向对象
一种更符合我们人类思维习惯的编程思想
复杂的事情简单化
面向对象开发就是不断的创建对象,使用对象,操作对象做事情

面向对象程序设计规则

首先分析有哪些类
每个类有哪些属性和行为
类与类之间存在的关系

类,方法,类变量的定义

类(class):用来描述具有相同的属性和方法的对象的集合。它定义了集合中每个对象所共有的属性和方法。对象时类的实例、

方法:类中定义的函数。类的方法与普通的函数只有一个特别的区别—它们必须有一个额外的第一个参数名称,按照惯例它的名称是self(其实取什么名字不重要,只要有这个参数就行,默认系统叫self)。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

class Person():
    name = "noname"
    
    def get_name(self):
        return self.name    
print(Person.name)
p = Person()
print(p.name)
print(p.get_name())


#p.name = "lili"
p.name= 'xiaoming'


Person.name = 'lili'
print(p.name)


p1 = Person()
print(p1.name)

实例引用,实例变量

实例:类的一个具体对象,比如,车类是一个类,摩托车或者自行车就是车类的一个实例。类是抽象的,实例是具体的。

实例引用:给一个对象起一个别名,比如,a是对象,b是a的引用,则a和b的地址空间都是一样的,修改b,则a就被同时修改、

实例变量:实例属性,在任意方法内部,以‘self.变量名’的方式定义的变量。
实例变量只能通过对象名访问,无法通过类名访问

class Person:
    def __init__ (self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

    def set_att(self, value): # 属性放在方法里面
        self.value = value
    
    def eat(self):
        print(f"name :{self.name}, age:{self.age}, gender:{self.gender}  我在吃.")

    def drink(self):
        print(f"name :{self.name}, age:{self.age}, gender:{self.gender}  我在吃.")

    def run(self):
        print(f"name :{self.name}, age:{self.age}, gender:{self.gender}  我在吃.")


xiaoming = Person("xiaoming", 10, 'male')
xiaohong = Person("xiaohong", 15, 'female')

print(xiaoming.name)
xiaoming.run()


xiaoming.set_att("fit")
print(xiaoming.value)