python面向对象中的,变量,方法与属性

1. 类的成员 
        
        class Foo:
            
            # 方法
            def __init__(self,name):
                # 实例变量/字段
                self.name = name     
                
            # 方法
            def func(self):
                pass 
    
        # obj,Foo类的对象
        # obj,Foo类的实例
        obj = Foo('朱奎峰')
    
    
        成员共分为三类:
        
            变量:
                - 实例变量(字段) 
                    - 公有实例变量(字段) 
                    - 私有实例变量(字段) 
                - 类变量(静态字段)
                    - 公有类变量(静态字段)
                    - 私有类变量(静态字段)
                    
                    实例一:
                        class Foo:
                            # 类变量(静态字段)
                            country = "中国"
                            
                            def __init__(self,name):
                                # 实例变量(字段)
                                self.name = name  
                            
                            
                            def func(self):
                                pass
                
                
                        obj1 = Foo('季红')
                        obj2 = Foo('王晓东')
                        
                        Foo.country
                        
                
                思考题: 如何验证儿子都不知道私有字段的存在.
                
                    无法访问:
                        class Base(object):
                            __secret = "受贿"

                        class Foo(Base):

                            def func(self):
                                print(self.__secret)
                                print(Foo.__secret)


                        obj = Foo()
                        obj.func()
                                        
                    可以访问:
                        class Base(object):
                            __secret = "受贿"

                            def zt(self):
                                print(Base.__secret)


                        class Foo(Base):

                            def func(self):
                                print(self.__secret)
                                print(Foo.__secret)


                        obj = Foo()
                        obj.zt()
                
                    
            方法:
                - 实例方法
                        class Foo(object):
                            def __init__(self, name):
                                self.name = name

                            # 实例方法
                            def func(self):
                                print(self.name)
                                
                        obj = Foo('..')
                        obj.func()
                        
                - 静态方法
                        class Foo(object):
                            def __init__(self, name):
                                self.name = name

                            # 静态方法,如果方法无需使用对象中封装的值,那么就可以使用静态方法
                            @staticmethod
                            def display(a1,a2):
                                return a1 + a2
                        Foo.display(1,3)
                        
                - 类方法
                        class Foo(object):
                        
                            # 类方法,cls是类
                            @classmethod
                            def show(cls,x1,x2):
                                print(cls,x1,x2)

                        # 执行类方法
                        Foo.show(1,8)

                面试题: 静态方法/类方法和实例方法的区别?
                
                    
            属性(通过方法改造出来):
                示例:
                    class Foo(object):
                        def __init__(self):
                            pass

                        @property
                        def start(self):
                            return 1

                        @property
                        def end(self):
                            return 10

                    obj = Foo()
                    print(obj.start)
                    print(obj.end)
                    """
                        # 总结:
                        #     1. 编写时
                        #            - 方法上方写 @property
                        #            - 方法参数:只有一个self
                        #     2. 调用时:无需加括号  对象.方法
                        #     3. 应用场景: 对于简单的方法,当无需传参且有返回值时,可以使用 @property
                    """

猜你喜欢

转载自www.cnblogs.com/journey-mk5/p/9550951.html
今日推荐