python入门之类和对象

    xiaoxiao2025-05-27  98

    1、类

    1.1、类简单理解为是对多组功能(方法)的封装。为了区分全局函数,一般在pthon中定义在类中的函数叫做方法。

    1.2、面向对象的三大特性:继承、封装和多态

     

    2、创建类

    2.1、创建类使用class关键字

    2.2、类中定义的方法第一个参数必须为self,在调用方法是此参数无需传,默认为调用此方法的对象。

    2.3、方法的调用有两种形式:第一种是使用对象直接调用,第二种是使用类调用

    例如:class Person:

                      def setName(self,name):

                            self.name = name

                      def  greet(self,age):

                             print("greet")

             p = Person()

             p.setName("hello")

             print(p.name)

             Person.greet(p)

     

    3、方法私有化

    1、在python中方法私有化是通过在方法前加入双下划线(__)实现的。

    2、方法私有化的本质是在方法前加入了(_类名),所以私有方法也是可以直接访问的,访问方式:_类名__方法名。

    例如:class Person:

                   def  __setName(self,name):

                          self.name = name

              p = Person()

              p.__setName("xx")   #报错

              p._Person__setName("xx")

              p.print(p.name)

    4、类中可以动态添加方法和属性

    4.1、动态添加属性和方法使用setattr函数。

    4.2、判断某类中是否包含某个属性或方法使用hasattr或getattr函数判断。

    例如:

    class Person: def __setName(self, name): self.name = name p = Person() p.age = 10 print(p.age) setattr(p, "clazz", '甲') def setScore(score): p.score = score setattr(p, "setScore", setScore) p.setScore(63) print(p.score) print(p.clazz)

    5、继承

    5.1、python支持多继承,继承的类以逗号隔开。

    5.2、多继承中如果存在相同的方法名,前面继承的方法会覆盖后继承的方法。

    5.3、在python中不存在方法重载这种说法,所有后面定义了和前面相同的方法名,会覆盖前面定义的方法,也就是前面定义的方法是不可以调用的。

    5.4、判断两个对象是否存在继承关系,可以使用issubclass函数。

    例如:class Person1:

                      def setName(self,name):

                              self.name = name

              class Person2:

                      def setAge(self,age):

                             self.age = age

              class Student(Person1,Person2):

                      def setScore(self,score):

                             self.score = score

             s = Student()

             s.setName("小明")

             print(s.name)

             print(issubclass(Student,Person1))

     

     

     

                           

     

    最新回复(0)